如何使用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
如果这不是您输入的内容,请更新您的问题以显示它。
我对 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
如果这不是您输入的内容,请更新您的问题以显示它。