找到独特的线条

问题描述 投票:0回答:13

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

1
1
2
3
5
5
7
7

我希望结果是:

2
3

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

linux sorting unique uniq
13个回答
114
投票

uniq
有你需要的选项:

   -u, --unique
          only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3

37
投票

使用方法如下:

sort < filea | uniq > fileb

26
投票

您还可以使用

cat
命令打印出“文件”中的唯一值
sort

    

我觉得这更容易。

uniq

17
投票

cat file | sort | uniq -u

代表独一无二。
    

虽然 
sort -u input_filename > output_filename

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

16
投票
-u


sort
awk '!seen[$0]++'
的缩写,如果

awk '!seen[$0]++'

 不为零,则打印 line(=$0)。
它占用更多空间但只需要 O(n) 时间。

你可以使用:

awk '!seen[$0]++ {print}'

14
投票
按唯一值对数据进行排序和过滤

uniq -u 一直让我发疯,因为它不起作用。

所以如果你有 python(大多数 Linux 发行版和服务器已经有它),而不是那样:

11
投票
假设您在 notUnique.txt 中有数据文件

seen[$0]

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

#

仅供参考,来自 uniq 手册页:

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

正确的调用方式之一: # 排序 nonUnique.txt |独特的

运行示例:

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'))

会做的。

5
投票

$ 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

如果您的文件是/可以排序,应该没问题,如果您由于某种原因无法对文件进行排序,您可以使用

3
投票

uniq

    

awk

这对我来说也适用于类似的。如果没有安排,请使用它。 如果安排好,您可以删除排序

3
投票
这是我第一次尝试

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

0
投票
做完 cat -e all.sorted

sort -d "file name" | uniq -u

每第二行都有一个尾随空格:( 删除所有尾随空格后它起作用了!

谢谢
    

除了排序然后使用

skilla:~# uniq -u all.sorted 76679787 76679787 76794979 76794979 76869286 76869286 ......

,您也可以只使用

0
投票
。来自

uniq

sort -u

简短,万无一失的方法:
sort --help

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.