Awk 找不到最常用的词
我需要从一个文件中获取所有带有一个元音的单词,并打印其中最常见的一个。我使用awk匹配一个元音单词,但我不知道如何获得最常见的元音单词 例如,对于文本测试qwerty word test,结果为test,则应打印测试 以下是我的awk脚本:Awk 找不到最常用的词,awk,Awk,我需要从一个文件中获取所有带有一个元音的单词,并打印其中最常见的一个。我使用awk匹配一个元音单词,但我不知道如何获得最常见的元音单词 例如,对于文本测试qwerty word test,结果为test,则应打印测试 以下是我的awk脚本: BEGIN { IGNORECASE=1; } { for(i=1; i<=NF; i++){ pattern = "\\<[^AEYUIO]*[AEYUIO][^AEYUIO]*\\>" # pattern for
BEGIN { IGNORECASE=1; }
{
for(i=1; i<=NF; i++){
pattern = "\\<[^AEYUIO]*[AEYUIO][^AEYUIO]*\\>" # pattern for one-vowel words
if($i ~ pattern){
print $i
}
}
}
它会打印出所有的单元音单词,现在我需要找到其中最常见的。我试着像这样使用sort:awk-f脚本文件_和|数据| sort,但我没有找到要使用的参数。请帮帮我。您需要使用awk吗?
否则,您可以通过混合使用grep和uniq-c获得它,如:
%回声测试qwerty单词测试结果为测试| tr''\n'| grep-iE^[^AEYUIO]*[AEYUIO][^AEYUIO]*$|排序| uniq-c |排序
1是
1
一个字
3试验
您需要使用awk吗?
否则,您可以通过混合使用grep和uniq-c获得它,如:
%回声测试qwerty单词测试结果为测试| tr''\n'| grep-iE^[^AEYUIO]*[AEYUIO][^AEYUIO]*$|排序| uniq-c |排序
1是
1
一个字
3试验
如果多个单词的计数相等,则只打印一个,在这种情况下,由于您已经在使用GNU awk IGNORECASE:
如果多个单词的计数相等,则只打印一个,在这种情况下,由于您已经在使用GNU awk IGNORECASE:
@赛勒斯我不同意你的编辑!我需要对单词进行排序,但我不知道使用哪个工具。我给出了一个排序工具的例子,所以这不是唯一的awk问题。@Cyrus我不同意你的编辑!我需要对单词进行排序,但我不知道使用哪个工具。我给出了一个排序实用程序的例子,所以这不仅仅是一个awk问题。是的,我必须用awk来做,但是你的回答帮助了我。我用| u data | sort | uniq-c | sort-r | head-n1编写了awk-f脚本文件|,它打印了我想要的内容!谢谢是的,我必须用awk来做,但是你的回答帮助了我。我用| u data | sort | uniq-c | sort-r | head-n1编写了awk-f脚本文件|,它打印了我想要的内容!谢谢
$ awk '
BEGIN { IGNORECASE=1; }
{
for(i=1; i<=NF; i++){
pattern = "\\<[^AEYUIO]*[AEYUIO][^AEYUIO]*\\>" # pattern for one-syllable words
if($i ~ pattern){
if(++freq[$i]>maxf){ # keep word count and compare
maxw=$i
maxf=freq[$i]
}
}
}
}
END{
print maxw
}' file
test
$ awk '
BEGIN { IGNORECASE=1; }
{
for(i=1; i<=NF; i++){
pattern = "\\<[^AEYUIO]*[AEYUIO][^AEYUIO]*\\>" # pattern for one-syllable words
if($i ~ pattern)
freq[$i]++ # word frequencies
}
}
END{
PROCINFO["sorted_in"]="@val_type_desc" # arm for sorting order
for(w in freq) # get biggest count
if(freq[w]>=p) { # and equal counts
print w
p=freq[w]
} else
break
}' file