寻找独特的线条

时间:2012-12-08 14:15:26

标签: linux sorting unique uniq

如何找到唯一的行并删除文件中的所有重复项? 我的输入文件是

1
1
2
3
5
5
7
7

我希望结果是:

2
3

sort file | uniq不会做这个工作。将显示所有值1次

11 个答案:

答案 0 :(得分:69)

uniq有您需要的选项:

   -u, --unique
          only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3

答案 1 :(得分:15)

使用如下:

sort < filea | uniq > fileb

答案 2 :(得分:7)

uniq -u一直让我发疯,因为它不起作用。

所以不是这样,如果你有python(大多数Linux发行版和服务器已经拥有它):

假设您有notUnique.txt

中的数据文件
#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.

uniqueData = []
fileData = open('notUnique.txt').read().split('\n')

for i in fileData:
  if i.strip()!='':
    uniqueData.append(i)

print uniqueData

###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))

请注意,由于空行,最终集可能包含''或仅空格字符串。您可以稍后删除它。或者只是从终端复制;)

仅供参考,来自uniq Man页面:

“注意:'uniq'不检测重复的行,除非它们相邻。您可能希望先对输入进行排序,或使用'sort -u'而不使用'uniq'。此外,比较遵循'LC_COLLATE指定的规则”“。

调用的正确方法之一: # 排序nonUnique.txt | uniq的

示例运行:

$ cat x
3
1
2
2
2
3
1
3

$ uniq x
3
1
2
3
1
3

$ uniq -u x
3
1
3
1
3

$ sort x | uniq
1
2
3

可能会打印空格,所以要做好准备!

答案 3 :(得分:4)

uniq -u < file将完成这项工作。

答案 4 :(得分:3)

uniq如果您的文件是/可以进行排序应该没问题,如果由于某种原因您无法对文件进行排序,则可以使用awk

awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'

答案 5 :(得分:3)

您还可以使用cat命令,通过管道传输到sortuniq

在“文件”中打印出唯一值。

cat file | sort | uniq -u

答案 6 :(得分:3)

我觉得这更容易。

sort -u input_filename > output_filename

-u代表唯一。

答案 7 :(得分:2)

sort -d "file name" | uniq -u

这对我来说类似的一个。如果没有安排,请使用此选项。 您可以删除排序

答案 8 :(得分:2)

虽然sort花费O(n log(n))的时间,但我更喜欢使用

awk '!seen[$0]++'

awk '!seen[$0]++'awk '!seen[$0]++ {print}'的缩写,如果seen[$0]不为零,则打印行(= $ 0)。 它占用更多空间,但只需要O(n)时间。

答案 9 :(得分:2)

您可以使用:

sort data.txt| uniq -u

此数据排序并按唯一值过滤

答案 10 :(得分:0)

这是我第一次尝试

skilla:~# uniq -u all.sorted  

76679787
76679787 
76794979
76794979 
76869286
76869286 
......

做了一只猫-e all.sorted

skilla:~# cat -e all.sorted 
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $

每隔一行都有一个尾随空格:( 删除所有尾随空格后,它有效!

谢谢