如何找到唯一行并从文件中删除所有重复项? 我的输入文件是
1
1
2
3
5
5
7
7
我希望结果是:
2
3
sort file | uniq
不会做这项工作。将显示所有值 1 次
uniq
有你需要的选项:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
使用方法如下:
sort < filea | uniq > fileb
您还可以使用
cat
命令打印出“文件”中的唯一值
sort
我觉得这更容易。
uniq
cat file | sort | uniq -u
虽然
sort -u input_filename > output_filename
需要 O(n log(n)) 时间,但我更喜欢使用-u
sort
是
awk '!seen[$0]++'
awk '!seen[$0]++'
不为零,则打印 line(=$0)。 它占用更多空间但只需要 O(n) 时间。
你可以使用:
awk '!seen[$0]++ {print}'
uniq -u 一直让我发疯,因为它不起作用。
所以如果你有 python(大多数 Linux 发行版和服务器已经有它),而不是那样:
seen[$0]
请注意,由于空行,最终集合可能包含 '' 或仅包含空格的字符串。您可以稍后将其删除。或者只是从终端复制;)
"注意:'uniq' 不会检测重复行,除非它们相邻。您可能想先对输入进行排序,或者使用不带 'uniq' 的 'sort -u'。此外,比较遵循 'LC_COLLATE' 指定的规则。 “
运行示例:
sort data.txt| uniq -u
可能会打印空格,所以要做好准备!
#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'))
$ 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
如果您的文件是/可以排序,应该没问题,如果您由于某种原因无法对文件进行排序,您可以使用
uniq
awk
这对我来说也适用于类似的。如果没有安排,请使用它。
如果安排好,您可以删除排序
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
每第二行都有一个尾随空格:( 删除所有尾随空格后它起作用了!
谢谢
除了排序然后使用
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
uniq
:
sort -u
简短,万无一失的方法:sort --help