#!/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"
}
}
}
这个awk脚本对我不起作用
我试图从一行搜索到另一行,id=22
直到end
(我不使用/<string>/,/<string>/
的原因是因为我希望在每个搜索块后都有一个大行)
我只想使用变量
我可以直接使用模式if ($0 ~ /end/) {
但我不想那样做,我想在搜索模式中使用变量
(原因是我将通过shell动态获取变量中的值)
请告诉我如何在awk的搜索模式中使用变量
感谢...
答案 0 :(得分:6)
{
awkvar2="id=22";
awkvar3="end";
if ($0 ~ awkvar2) {
triggered=1;
}
if (triggered) {
print;
if ($0 ~ awkvar3) {
triggered=0;
print "\n-----------------------------------------------\n"
}
}
}
修改
根据“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;}
}
或者更多 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;}
答案 1 :(得分:0)
belisarius awk脚本的更紧凑版本,没有'if's
BEGIN {awkvar2="id=22";awkvar3="end"}
($0 ~ awkvar2) {print prev;}
($0 ~ awkvar2),($0 ~ awkvar3) {print; }
($0 ~ awkvar3) {print "\n---------------\n"}
{prev=$0;}