find独特的线条

我如何find唯一的行,并从文件中删除所有重复项? 我的input文件是

1 1 2 3 5 5 7 7 

我想结果是:

 2 3 

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

Solutions Collecting From Web of "find独特的线条"

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 < file将完成这项工作。

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手册页:

“注意:'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 -ux 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}'

这是我第一次尝试

 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 $ 

每第二行有一个尾随空间:(删除所有后面的空间它的工作!

谢谢