首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用linux命令从纯文本文件中删除重复的单词

如何使用linux命令从纯文本文件中删除重复的单词
EN

Stack Overflow用户
提问于 2009-06-04 18:24:38
回答 10查看 57.2K关注 0票数 22

我有一个纯文本文件,其中包含用逗号分隔的单词,例如:

代码语言:javascript
复制
word1, word2, word3, word2, word4, word5, word 3, word6, word7, word3

我想删除重复项,并成为:

代码语言:javascript
复制
word1, word2, word3, word4, word5, word6, word7

有什么想法吗?我认为,egrep可以帮助我,但我不确定,如何确切地使用它...

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-06-04 18:30:04

假设单词是每行一个,并且文件已经排序:

代码语言:javascript
复制
uniq filename

如果文件未排序:

代码语言:javascript
复制
sort filename | uniq

如果它们不是每行一个,并且您不介意它们是每行一个:

代码语言:javascript
复制
tr -s [:space:] \\n < filename | sort | uniq

不过,这并不会删除标点符号,所以您可能需要:

代码语言:javascript
复制
tr -s [:space:][:punct:] \\n < filename | sort | uniq

但这会删除连字符单词中的连字符。"man tr“获取更多选项。

票数 33
EN

Stack Overflow用户

发布于 2009-06-04 18:33:45

ruby -pi.bak -e '$_.split(",").uniq.join(",")' filename

我承认这两种引语很难看。

票数 3
EN

Stack Overflow用户

发布于 2009-06-04 18:49:56

创建一个唯一的列表非常容易,这要归功于uniq,尽管大多数Unix命令喜欢每行一个条目,而不是逗号分隔的列表,所以我们必须首先将它转换为:

代码语言:javascript
复制
$ sed 's/, /\n/g' filename | sort | uniq
word1
word2
word3
word4
word5
word6
word7

更难的部分是将它放在一行中,使用逗号作为分隔符,而不是结束符。我使用了perl一行程序来做这件事,但是如果有人有更常用的东西,请编辑我。:)

代码语言:javascript
复制
$ sed 's/, /\n/g' filename | sort | uniq | perl -e '@a = <>; chomp @a; print((join ", ", @a), "\n")'
word1, word2, word3, word4, word5, word6, word7
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/952268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档