我正在寻找一个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
答案 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