awk获得下一行而不消耗它

时间:2017-04-11 12:04:47

标签: awk

例如,我使用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

2 个答案:

答案 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

如果这不是您想要的,那么请编辑您的问题以澄清您的要求并提供更好地展示您需求的样本输入/输出。