0

假设您有这样的文件:

Rowname  
useless number  
useless number  
1596 1787  
1595 1787  
1594 1787  
1565 1803  
1565 1804  

我知道如何告诉 awk 跳过useless number和 awk 第 5 行和第 6 行Rowname。但是,如果与前一行的差异仅为 1,我如何告诉 awk 跳过该行?输出应该是:

1596 1787  
1565 1803

我的问题是,在某些情况下,我得到了这个:

1595 1787  
1594 1787

换一种说法:我总是想要行名中的第 3 行,但如果与第 3 行的差异仅为 1(或 2 或 3),我不想要第 4 行(或 5 或 6)。

那有意义吗?

4

2 回答 2

1

如果您想打印“行名”,这似乎符合您的要求;如果没有,请省略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
$
于 2013-11-08T04:34:18.607 回答
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
于 2013-11-08T02:45:11.783 回答