using variables in search pattern in awk script
#!/usr/local/bin/gawk -f `
{
awkvar2="/id=22/";
awkvar3="/end/";
if ($0 ~ awkvar2) {
triggered=1;
}
if (triggered) {
print;
if ($0 ~ awkvar3) {
triggered=0;
print "\n-----------------------------------------------\n"
}
}
}
this awk script is not working for me
i am trying to search from one line to another i.e id=22
till end
(the reason i am not using /<string>/,/<string>/
is because i want a big line after each block of search)
and i want this using variables only.
if ($0 ~ /end/) {
but i dont want to do that, i want to use the variables inside the search pattern
(reason is i will be getting the values in the variables dynamically thorough the shell)
please advise me how to use variables inside the search pattern fo开发者_运维知识库r awk
thanks...
{
awkvar2="id=22";
awkvar3="end";
if ($0 ~ awkvar2) {
triggered=1;
}
if (triggered) {
print;
if ($0 ~ awkvar3) {
triggered=0;
print "\n-----------------------------------------------\n"
}
}
}
Edit
Modified per request to print the line before "id=22"
{
awkvar2="id=22";
awkvar3="end";
if ($0 ~ awkvar2) {
print prev;
triggered=1;
}
if (triggered) {
print;
if ($0 ~ awkvar3) {
triggered=0;
print "\n-----------------------------------------------\n"
}
}
{prev=$0;}
}
Or, more awkish
BEGIN {awkvar2="id=22";awkvar3="end"}
($0 ~ awkvar2),($0 ~ awkvar3) { if ($0 ~ awkvar2) {print prev;}
print;
if ($0 ~ awkvar3) {
print "\n---------------\n"
}
}
{prev=$0;}
More compact version of belisarius awk script, without 'if's
BEGIN {awkvar2="id=22";awkvar3="end"}
($0 ~ awkvar2) {print prev;}
($0 ~ awkvar2),($0 ~ awkvar3) {print; }
($0 ~ awkvar3) {print "\n---------------\n"}
{prev=$0;}
精彩评论