使用awk基于字段中的值差异来分隔行块

时间:2016-01-27 02:09:21

标签: awk

我的输入看起来像这样(以制表符分隔):

line0   450
line1   500
line2   550
line3   600
line4   650
line5   1000
line6   1100
line7   1500
line8   1550
line9   1600
line10   1650

...并且希望它看起来像这样:将第二个字段中的跳跃小于300的行与前一行中的等效值保持在一起,并将结果块与跳转超过300的块分开:< / p>

line0   450
line1   500
line2   550
line3   600
line4   650
XXXX
line5   1000
line6   1100
XXXX
line7   1500
line8   1550
line9   1600
line10   1650

我试过的awk脚本但是效果不好,因为它在连续的对中占用了行并且没有测试每个输入行的条件以及下一个:

{
p=$0; coord=$2; getline;
    if ($2 - coord <= 300)
        print p"\n"$0
    else
        print p"\nXXXX"
}

1 个答案:

答案 0 :(得分:2)

awk救援!

$ awk 'NR>1 && $2-p>300{print "XXXXX"} {p=$2}1' file

line0   450
line1   500
line2   550
line3   600
line4   650
XXXXX
line5   1000
line6   1100
XXXXX
line7   1500
line8   1550
line9   1600
line10   1650