Find unique lines

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

1
1
2
3
5
5
7
7

我希望结果是:

2
3

sort file | uniq将不执行此任务。将一次显示所有值

244391 次浏览

uniq -u < file会完成任务。

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

这是我第一次尝试

skilla:~# uniq -u all.sorted


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

在做了所有的事情之后

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

每两行都有一个尾随空格: ( 在删除所有尾随空格后,它工作了!

谢谢你

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

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

如果你的文件是/可以排序,如果你不能排序的文件,你可以使用 awk:

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

sort -d "file name" | uniq -u

这对我的一个类似的工作。使用这个,如果没有安排。 如果排序已安排,则可以删除它

虽然 sort需要 O (n log (n))时间,但我更喜欢使用

awk '!seen[$0]++'

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

您还可以使用 cat命令通过管道打印到 sortuniq,从而打印出“ file”中的唯一值

cat file | sort | uniq -u

你可使用:

sort data.txt| uniq -u

按唯一值对数据和过滤器进行排序

我觉得这样更容易。

sort -u input_filename > output_filename

-u代表独一无二。