在特定列上使用uniq -d?

时间:2015-10-11 04:25:34

标签: linux unix

有这样的文本文件。

john,3
albert,4
tom,3
junior,5
max,6
tony,5

我正在尝试获取column2值相同的记录。我想要的输出。

john,3
tom,3
junior,5
tony,5

我正在检查我们是否可以在第二列使用uniq -d

2 个答案:

答案 0 :(得分:2)

这是使用的一种方式。它读取输入文件两次,但不需要排序:

awk -F, 'FNR==NR { a[$2]++; next } a[$2] > 1' file file

结果:

john,3
tom,3
junior,5
tony,5

简要说明:

FNR==NR是一个常见的AWK习惯用法,对于参数列表中的第一个文件是正确的。这里,第二列被添加到一个数组并递增。在第二次读取文件时,我们只需检查第二列的值是否大于一(next关键字跳过处理其余代码)。

答案 1 :(得分:1)

您可以在字段(列)上使用uniq,但在您的情况下不容易。

Uniq的-f-s选项分别按字段和字符进行过滤。然而,这些都没有做到这一点。

-f按空格划分字段,然后用逗号分隔它们。 -s会跳过固定数量的字符,而且您的名字长度可变。

总的来说,uniq用于通过将重复项合并为唯一行来压缩输入。你实际上希望保留重复并消除单例,这与uniq用来做的相反。看起来你需要一种不同的方法。