如何使用awk从文本文件中打印多个字符串的总数

How to print total count of multiples strings from a text file using awk

我对 awk 非常陌生,所以我在解决这个问题时遇到了一些麻烦。我需要做的是编写一个脚本来打印三个字符串的计数 "They"、"He" "She",但我只能在 awk 中执行此操作并且单词区分大小写。到目前为止,它只打印 "They" 在文本文件(这是一篇文章)中出现的次数,而不是其他的。关于如何仅在 awk 中执行此操作的一些输入会很棒。这是我目前所拥有的

awk 'BEGIN {print "They" " " "He" " " "She"} #printing header {for (i=0;i<=NF;i++)if ( $i =="They" ) numA++; if ( $i =="He" ) numB++; if ( $i =="She" ) numC++ } END {print numA," ", numB, " ", numC}' myFile.txt

预期的输出应该是:

They He She 24 16 17

您缺少 'for' 循环的大括号 - 您应该有 :

awk 'BEGIN {print "They" "  " "He" "  " "She"} #printing header
    {for (i=0;i<=NF;i++)
        {
            if ( $i =="They" ) numA++;
            if ( $i =="He" ) numB++;
            if ( $i =="She" ) numC++;
         }
} END {print numA,"  ", numB, "  ", numC}' myFile.txt

假设您的输入是 space 分隔的单个单词行,方法如下:

awk '
BEGIN{
    numWords = split("They He She",tmp)
    for (i in tmp) {
        words[i]
    }
}
{
    for (i=1;i<=NF;i++) {
        if ($i in words) {
            cnt[$i]++
        }
    }
}
END {
    for (wordNr=1; wordNr <= numWords; wordNr++) {
        printf "%s%s", tmp[wordNr], (wordNr<numWords?OFS:ORS)
    }
    for (wordNr=1; wordNr <= numWords; wordNr++) {
        printf "%d%s", cnt[tmp[wordNr]], (wordNr<numWords?OFS:ORS)
    }
}' file

如果这不是您输入的内容,请更新您的问题以显示它。