如何从文件中找到唯一的行并删除所有重复项?我的输入文件是:
1
1
2
3
5
5
7
7
我希望的结果是:
2
3
sort file | uniq
无法完成任务,它只会显示所有值1次。
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
- Chris Seymoursort<filea.txt | uniq>fileb.txt
。也许你忘记加扩展名了。我使用的是 Mac OS X。你需要从 filea.txt
转到另一个 fileb.txt
。 - kasavberesort
时不需要重定向,而将其管道传输到uniq
有什么意义呢?当你可以直接使用sort -u file -o file
时,你正在删除重复的值,即你的fileb
包含1,2,3,5,7
,而OP只想要唯一的行,即2,3
,这可以通过uniq -u file
实现。文件扩展名与此无关,你的答案是错误的。 - Chris Seymour您还可以使用管道将“file”文件的唯一值打印出来,方法是使用cat
命令并将其与sort
和uniq
联合使用。
cat file | sort | uniq -u
我觉得这更容易。
sort -u input_filename > output_filename
-u
代表唯一。
虽然 sort
的时间复杂度为 O(n log(n)),但我更喜欢使用
awk '!seen[$0]++'
awk '!seen[$0]++'
是 awk '!seen[$0]++ {print}'
的缩写,如果 seen[$0]
不为零,则打印行(=$0)。
它需要更多的空间,但只需要 O(n) 的时间。
你可以使用:
sort data.txt| uniq -u
对这些数据进行排序并按照唯一值进行筛选
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'))
$ 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 -u < file
会完成任务。
uniq
命令就足够了。如果由于某些原因无法对文件进行排序,您可以使用awk
命令:awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
这对我处理类似问题时有效。如果未排序,请使用此方法。如果已排序,可以删除 sort。
sort file | uniq -u
将会输出到控制台。 - ma77csort file | uniq
显示所有值仅一次的原因是因为它立即打印第一次遇到的行,对于后续的重复行,它只是跳过它们。 - MrObjectOriented