寻找独特的线条

amp*_*ino 71 linux sorting unique uniq

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

1
1
2
3
5
5
7
7
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

2
3
Run Code Online (Sandbox Code Playgroud)

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

Lev*_*sky 74

uniq 有你需要的选项:

   -u, --unique
          only print unique lines
Run Code Online (Sandbox Code Playgroud)
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
Run Code Online (Sandbox Code Playgroud)

  • 如果文件中的条目已经排序,请确保排序.sort file.txt | uniq的 (26认同)

小智 21

我发现这更容易。

sort -u input_filename > output_filename
Run Code Online (Sandbox Code Playgroud)

-u代表独特。


kas*_*ere 19

使用方法如下:

sort < filea | uniq > fileb
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的,我认为你的意思是:`uniq -u filea> fileb` (2认同)

Vit*_*hou 12

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

awk '!seen[$0]++'
Run Code Online (Sandbox Code Playgroud)

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


ash*_*ew2 8

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'))
Run Code Online (Sandbox Code Playgroud)

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

#

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

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

调用的正确方法之一:#sort 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
Run Code Online (Sandbox Code Playgroud)

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

  • 这太过分了. (2认同)

bla*_*ker 8

您可以使用:

sort data.txt| uniq -u
Run Code Online (Sandbox Code Playgroud)

这种排序数据并按唯一值过滤


小智 7

您还可以打印出独特的价值在“文件”使用cat通过管道传输到指挥sortuniq

cat file | sort | uniq -u


Shi*_*dim 5

uniq -u < file
Run Code Online (Sandbox Code Playgroud)

会做这项工作。