我有一个纯文本文件,其中包含用逗号分隔的单词,例如:
word1, word2, word3, word2, word4, word5, word 3, word6, word7, word3
我想删除重复项,并成为:
word1, word2, word3, word4, word5, word6, word7
有什么想法吗?我认为,egrep可以帮助我,但我不确定,如何确切地使用它...
发布于 2009-06-04 18:30:04
假设单词是每行一个,并且文件已经排序:
uniq filename
如果文件未排序:
sort filename | uniq
如果它们不是每行一个,并且您不介意它们是每行一个:
tr -s [:space:] \\n < filename | sort | uniq
不过,这并不会删除标点符号,所以您可能需要:
tr -s [:space:][:punct:] \\n < filename | sort | uniq
但这会删除连字符单词中的连字符。"man tr“获取更多选项。
发布于 2009-06-04 18:33:45
ruby -pi.bak -e '$_.split(",").uniq.join(",")' filename
?
我承认这两种引语很难看。
发布于 2009-06-04 18:49:56
创建一个唯一的列表非常容易,这要归功于uniq
,尽管大多数Unix命令喜欢每行一个条目,而不是逗号分隔的列表,所以我们必须首先将它转换为:
$ sed 's/, /\n/g' filename | sort | uniq
word1
word2
word3
word4
word5
word6
word7
更难的部分是将它放在一行中,使用逗号作为分隔符,而不是结束符。我使用了perl一行程序来做这件事,但是如果有人有更常用的东西,请编辑我。:)
$ sed 's/, /\n/g' filename | sort | uniq | perl -e '@a = <>; chomp @a; print((join ", ", @a), "\n")'
word1, word2, word3, word4, word5, word6, word7
https://stackoverflow.com/questions/952268
复制相似问题