Print lines matching a pattern only if the next line does not match the pattern
我想使用awk打印与模式匹配的行,但前提是下面的行与模式不匹配。在这种情况下,模式是行以o开头。这是我尝试的:
1 | awk '!/^O/ {print x}; /^O/ {x=$0}' myfile.txt |
不过,这打印的行太多了,包括打印我特别不想打印的行。
未测试。Probz应该工作吗
1 | awk '/^O/{if(seen==0){seen=1};c=$0} !/^O/{if (seen==1) {print c; seen=0;}}' myfile.txt |
缩短版
1 | awk '/^O/{x=$0} !/^O/{if(x!=0) {print x; x=0;}}' myfile.txt |
更多缩短
1 | awk '/^O/{x=$0} !/^O/{if(x){print x;x=0;}}' myfile |
觉得这是最短的了
1 | awk '/^O/{x=$0} !/^O/&&x{print x;x=0;}' myfile |
把它们都改了,因为它印错了行。
也让它变短了:)
1 | awk 'a=/^O/{x=$0} !a&&x{print x;x=0;}' myfile |