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
.
.
.