查找同一文件的两行之间的差异

查找同一文件的两行之间的差异

我有一个这样的文件,

19:36:19_19/06/2017 1786
19:38:21_19/06/2017 2138
19:40:22_19/06/2017 2612
19:42:23_19/06/2017 2613
19:44:28_19/06/2017 2613
19:46:32_19/06/2017 2613
19:48:33_19/06/2017 2613
19:50:35_19/06/2017 2613

最多 6827 行。

我想找到第 4 行和第 1 行的差异(仅数据而不是时间),如果大于 100,则打印前四行,如果不是,则比较第 5 行和第 2 行,依此类推,最多 6000 行。

然后,第 4 行 - 第 1 行中的数据(1786-2613) > 100,打印前 4 行(包括计时)。然后继续比较第 5 行-第 2 行,(2138-2613) > 100然后打印第 2、3、4、5 行。同样,我想比较最多 6000 行。

我想要这样的输出,

19:36:19_19/06/2017 1786
19:38:21_19/06/2017 2138
19:40:22_19/06/2017 2612
19:42:23_19/06/2017 2613



19:38:21_19/06/2017 2138
19:40:22_19/06/2017 2612
19:42:23_19/06/2017 2613
19:44:28_19/06/2017 2613

答案1

您可以维护最近 4 个键值对的数组,并使用模算术循环遍历它们,例如

awk '{
  v[(NR-1)%4] = $0; k[(NR-1)%4] = $2
}
NR > 3 {
  if ($2 - k[NR%4] > 100) {
    for (i=NR;i<NR+4;i++) print v[i%4]; print ""
  }
}' file 
19:36:19_19/06/2017 1786
19:38:21_19/06/2017 2138
19:40:22_19/06/2017 2612
19:42:23_19/06/2017 2613

19:38:21_19/06/2017 2138
19:40:22_19/06/2017 2612
19:42:23_19/06/2017 2613
19:44:28_19/06/2017 2613

相关内容