我想使用awk仅在以下行与模式不匹配时才打印与模式匹配的行。在这种情况下,模式是该行以 O 开头。这就是我试过的:
awk '!/^O/ {print x}; /^O/ {x=$0}' myfile.txt
这打印太多行了,包括打印我特别不想打印的行。
答案 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