假设您有这样的文件:
Rowname
useless number
useless number
1596 1787
1595 1787
1594 1787
1565 1803
1565 1804
我知道如何告诉awk根据useless number
跳过Rowname
和awk第5行和第6行。但是,如果差异只是前一行的1,我如何告诉awk跳过该行?输出应为:
1596 1787
1565 1803
我的问题是在某些情况下我得到了这个:
1595 1787
1594 1787
另一种说法:我总是希望行名称中的第3行,但如果第3行与第3行的区别仅为1(或2或3),我不希望第4行(或5或6)。
这有意义吗?
答案 0 :(得分:1)
如果您想要打印“Rowname”,这似乎符合您的要求;如果没有,请省略脚本第一行中的print
:
$ awk '/^Rowname/ { nr=NR; print; next }
> NR==nr+1||NR==nr+2 { next }
> NR==nr+3 { v1=$1; print; next }
> { if (abs(v1-$1) > 1) print; v1=$1; }
> function abs(x) { return (x < 0) ? -x : x }
> ' data
Rowname
1596 1787
1565 1803
$
答案 1 :(得分:0)
这个可以做到
awk '#print line 4
NR == 4;
#print any line that meets the "sum" comparison condition
NR > 4 && ($1 + $2 - prev_sum != -1) && ($1 + $2 - prev_sum != 1);
#set the sum for this line into a variable
{prev_sum=$1 + $2}' file.txt