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

我需要从一个文件中获取所有带有一个元音的单词,并打印其中最常见的一个。我使用awk匹配一个元音单词,但我不知道如何获得最常见的元音单词

例如,对于文本测试qwerty word test,结果为test,则应打印测试

以下是我的awk脚本:

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