检查特定列中的值是否在下面一行的同一列中相同?

时间:2018-05-28 23:05:55

标签: linux bash text-manipulation

我正在寻找一个Linux命令,我可以在其中比较,如果对于单个列,下面的行与当前正在检查的行的值相同,如果它们然后输出两行。我的文件是分隔符。

输入示例:

line 1  1   var281  7

line 2  1   var100  80

line 3  1   var99   85

line 4  2   var281  90

line 5  2   var281  91

line 6  2   var300  61

line 7  3   var50   45

line 8  3   var99   14

line 9  3   var99   19

line 10 3   var670  80

期望的输出:

line 4  2   var281  90

line 5  2   var281  91

line 8  3   var99   14

line 9  3   var99   19

1 个答案:

答案 0 :(得分:1)

您可以使用:

sed '/^\s*$/d;s/\s[0-9][^ ]*$//g' inputfile | uniq -D -f3

这里sed删除空行(^\s*$)以及inputfile的最后一个字段。 Uniq打印重复的行,忽略前三个字段(-f3)。输出是:

line 4 2 var281
line 5 2 var281
line 8 3 var99
line 9 3 var99

注意不打印最后一个字段。打印它可以使用grep:

grep "$(sed '/^\s*$/d;s/\s[0-9][^ ]*$//g' inputfile | uniq -D -f3)" inputfile

输出:

line 4 2 var281 90
line 5 2 var281 91
line 8 3 var99 14
line 9 3 var99 19