【发布时间】:2014-06-26 21:59:57
【问题描述】:
我想使用 awk 仅在以下行与模式不匹配时打印与模式匹配的行。在这种情况下,模式是行以 O 开头。这是我尝试过的:
awk '!/^O/ {print x}; /^O/ {x=$0}' myfile.txt
不过,这打印的行太多了,包括打印我特别不想打印的行。
【问题讨论】:
标签: awk
我想使用 awk 仅在以下行与模式不匹配时打印与模式匹配的行。在这种情况下,模式是行以 O 开头。这是我尝试过的:
awk '!/^O/ {print x}; /^O/ {x=$0}' myfile.txt
不过,这打印的行太多了,包括打印我特别不想打印的行。
【问题讨论】:
标签: awk
未测试。 应该probz工作
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
【讨论】:
awk '/^O/{if(seen==0){seen=1;print $0}} !/^O/{if (seen==1) {seen=0}}'