如何找到唯一的行并从文件中删除所有重复项?我的输入文件是
1
1
2
3
5
5
7
7
我希望结果是:
2
3
sort file | uniq
不会做这份工作。将显示所有值1次
如何找到唯一的行并从文件中删除所有重复项?我的输入文件是
1
1
2
3
5
5
7
7
我希望结果是:
2
3
sort file | uniq
不会做这份工作。将显示所有值1次
sort file | uniq
是一次显示所有值是因为它会立即打印第一次遇到的行,而对于随后的遇到,它只会跳过它们。
Answers:
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
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
。也许您忽略了扩展。我使用你从去一个Mac OS X的filea.txt
其他一些fileb.txt
sort
什么uniq
时候可以做的sort -u file -o file
事情是传递管道的目的是删除重复的值,即您所fileb
包含1,2,3,5,7
的OP只希望2,3
通过uniq -u file
文件扩展名实现的唯一行没有任何内容对此,您的答案是错误的。
uniq -u一直让我发疯,因为它没有用。
因此,相反,如果您拥有python(大多数Linux发行版和服务器已经拥有python):
#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手册页中:
“注意:'uniq'不会检测重复的行,除非它们是相邻的。您可能要先对输入进行排序,或者使用'sort -u'而不使用'uniq'。而且,比较会遵循'LC_COLLATE'指定的规则。”
正确的调用方式之一:#sort nonUnique.txt | 优衣库
$ 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
这为我工作了类似的。如果未安排,请使用它。您可以删除排序(如果已安排)
sort file | uniq -u
将为您输出到控制台。