这是我的示例输入文件:
xxxxx,12345,yy,ABN,ABE,47,20171018130030,122021010147421,2,IN,3,13,9741588177,32
xxxxxx,9741588177,yy,ABN,ABE,54,20171018130030,122025010227014,2,IN,3,15,12345,32
我要将此文件中的连续两行与以下条件进行比较:
文件中包含许多不满足上述条件的行,我只想打印满足条件1和2的行。
在这方面的任何帮助都将不胜感激!
答案 0 :(得分:0)
不清楚是要比较2组(即比较行1和2,然后比较行3和4)还是串行比较(即比较行1和2,然后比较2和3) 。对于后者:
awk 'NR > 1 && prev_12 == 13 && $12 == 15 &&
prev_2 == $13 {print prev; print $0}
{prev=$0; prev_12=$12; prev_2=$2}' FS=, input-file
对于前者,添加条件NR % 2 == 0
。 (我假设您打算提到字段是用逗号分隔的,这似乎是由输入判断的情况。)
答案 1 :(得分:0)
另一个awk
$ awk -F, '$12==13 {p0=$0; p2=$2; c=1; next}
c&&c-- && $12==15 && p2==$13 {print p0; print}' file
仅当第一行$12
的初始匹配时才开始捕获。
c&&c--
是一个智能计数器(此处为递减计数),它将停止为0(由于“&”号之前的第一个c
)。埃德·莫顿(Ed Morton)的帖子中提供了更多smart counters
答案 2 :(得分:0)
希望您使用了多行示例输入并提供了预期的输出,所以我们不仅要猜测,还可以这样做:
$ cat tst.awk
BEGIN { FS="," }
(p[12] == 13) && ($12 == 15) && (p[2] == $13) { print p[0] ORS $0 }
{ split($0,p); p[0]=$0 }
$ awk -f tst.awk file
xxxxx,12345,yy,ABN,ABE,47,20171018130030,122021010147421,2,IN,3,13,9741588177,32
xxxxxx,9741588177,yy,ABN,ABE,54,20171018130030,122025010227014,2,IN,3,15,12345,32