Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 如何删除文本文件中的重复单词_Awk_Grep_Duplicates - Fatal编程技术网

Awk 如何删除文本文件中的重复单词

Awk 如何删除文本文件中的重复单词,awk,grep,duplicates,Awk,Grep,Duplicates,我有一个文本文件: abandonovať abandonovať, neabandonovať abandonovať, abandonujem abandonovať, abandonuješ abandonovať, abandonuje abandonovať, abandonuje abandonovať, abandonuje abandonovať, neabandonujem abandonovať, neabandonuješ 我要删除所有重复的单词。它将如下所示: aban

我有一个文本文件:

abandonovať
abandonovať, neabandonovať
abandonovať, abandonujem
abandonovať, abandonuješ
abandonovať, abandonuje
abandonovať, abandonuje
abandonovať, abandonuje
abandonovať, neabandonujem
abandonovať, neabandonuješ
我要删除所有重复的单词。它将如下所示:

abandonovať
neabandonovať
abandonujem
abandonuješ
abandonuje
neabandonujem
neabandonuješ

有人知道怎么用GREP,AWK

这里有一种使用GNU awk的方法:

awk -F "[, ]" '{ for(i=1;i<=NF;i++) if (!a[$i]++ && $i != "") print $i }' file
您可以尝试使用:

grep -o '\w*' a.txt | sort | uniq

其中a.txt是您的文件。

谢谢大家,在GREP中它可以工作,但它可以按字母表对单词进行排序。在AWK中它也可以工作,但我还有一个小问题。我的文本文件是:

abandonovať
abandonovať, neabandonovať
abandonovať, abandonujem
.
.
.
如果我在awk中输入您的代码,我的结果是:

abandonovať
abandonovať,
neabandonovať
abandonujem
.
.
.

一个词有两次。一次加“,”一次不加“,”

再想想,如果行中的某个地方有多余的空格,这可能会失败?这些多余的空格前面必须加逗号。但是如果是这样的话,那么var可能是某种单词。它可以工作,但在我的文本文件中有“nebudem-auddovať”这样的单词,它与“auddovať”相反,但是这个命令删除了“auddovať”,只保留了“nebudem”。怎么解决这个问题?@user1844845:我想请你再检查一下。此命令将仅用“,”分隔符分隔单词(即逗号和空格)。因此,“nebudem Underovať”将被视为一个单词。如果您需要进一步的帮助,请发布更多的示例数据(并通过在此处添加评论让我知道)。干杯。
a[$i]++;if(a[$i]==1)print$i
可以写成
if(!a[$i]++)print$i
!seen[“foo”]++是一种惯用的awk方法,用于检查是否以前见过“foo”。它可以工作,但在我的文本文件中,我有“nebudem underovať”这样的词,它与“underovať”相反,但此命令删除了“underovať”,只保留了“nebudem”。如何解决此问题?您可以使用
“\(\w\+\s\)\?\w*”
作为模式谢谢。如果我不想按字母表对单词进行排序?如果你不
sort
,你就不能使用
uniq
删除重复项。或者你可以试试下面steve的解决方案,它可能会奏效。
abandonovať
abandonovať,
neabandonovať
abandonujem
.
.
.