仅当下一行与模式不匹配时才打印与模式匹配的行

时间:2014-06-26 09:32:46

标签: awk

我想使用awk仅在以下行与模式不匹配时才打印与模式匹配的行。在这种情况下,模式是该行以 O 开头。这就是我试过的:

awk '!/^O/ {print x}; /^O/ {x=$0}' myfile.txt 

这打印太多行了,包括打印我特别不想打印的行。

1 个答案:

答案 0 :(得分:1)

未经测试。 应该工作吗

awk '/^O/{if(seen==0){seen=1};c=$0} !/^O/{if (seen==1) {print c; seen=0;}}' myfile.txt

缩短版

 awk '/^O/{x=$0} !/^O/{if(x!=0) {print x; x=0;}}' myfile.txt

更多缩短

awk '/^O/{x=$0} !/^O/{if(x){print x;x=0;}}' myfile

认为这是最短的可以去

awk '/^O/{x=$0} !/^O/&&x{print x;x=0;}' myfile

将它们全部更改,因为它打印了错误的行。

也缩短了:)

awk 'a=/^O/{x=$0} !a&&x{print x;x=0;}' myfile