例如,我使用awk
搜索特定字词,让我们说joker
。当我找到这个单词时,我需要检查下一行,如果有第二个单词,请说batman
。但如果我有这样的文件就会出现问题:
joker
batman joker
batman
在此文件中,awk
在第一行找到joker
。然后,我使用getline
并检查第二行是否有batman
。问题是,如果我这样做,awk
将直接转到第三行,并将错过第二行的joker
。
是否有办法使用awk获取文件的下一行而不使用它?
关于输出,我想打印已找到两个单词的行。在此示例中,输出为:
1-joker
2-batman joker
我的预期输出是:
1-joker
2-batman joker
2-batman joker
3-batman
答案 0 :(得分:0)
awk '{a[NR]=$0} END{
for(i=1;i<=NR;i++){
if(a[i]~/joker/ && i+1<=NR && a[i+1]~/batman/){
print i"-"a[i]
print i+1"-"a[i+1]RS
}
}
}' file
输出:
1-joker
2-batman joker
2-batman joker
3-batman
它将整个文件加载到数组中,并在for
循环中执行匹配逻辑。
答案 1 :(得分:0)
您的要求非常不清楚。要从您发布的示例输入中获得您想要的输出,您可以这样做:
$ awk -v OFS='-' 'NR>1{print NR-1, prev ORS NR, $0 ORS} {prev=$0}' file
1-joker
2-batman joker
2-batman joker
3-batman
如果这不是您想要的,那么请编辑您的问题以澄清您的要求并提供更好地展示您需求的样本输入/输出。