awk + ​​计算文件中的字符串

awk + ​​计算文件中的字符串

我们有这样的巨大文件

这是文件中的部分列表

Topic: Ho_HTR_bvt     Partition: 31   Leader: 1007    Replicas: 1007,1008,1009        Isr: 1009,1007,1008
Topic: Ho_HTR_bvt     Partition: 32   Leader: 1008    Replicas: 1008,1009,1010        Isr: 1010,1009,1008
Topic: Ho_HTR_bvt     Partition: 33   Leader: 1009    Replicas: 1009,1010,1006        Isr: 1009,1010,1006
Topic: Ho_HTR_bvt     Partition: 34   Leader: 1010    Replicas: 1010,1006,1007        Isr: 1006,1007,1010
Topic: Ho_HTR_bvt     Partition: 35   Leader: 1006    Replicas: 1006,1008,1009        Isr: 1006,1009,1008
Topic: Ho_HTR_bvt     Partition: 36   Leader: 1007    Replicas: 1007,1009,1010        Isr: 1010,1007,1009
Topic: Ho_HTR_bvt     Partition: 37   Leader: 1008    Replicas: 1008,1010,1006        Isr: 1006,1010,1008
Topic: Ho_HTR_bvt     Partition: 38   Leader: 1009    Replicas: 1009,1006,1007        Isr: 1007,1009,1006
Topic: Ho_HTR_bvt     Partition: 39   Leader: 1010    Replicas: 1010,1007,1008        Isr: 1010,1007,1008
Topic: Ho_HTR_bvt     Partition: 40   Leader: 1006    Replicas: 1006,1009,1010        Isr: 1006,1010,1009
Topic: Ho_HTR_bvt     Partition: 41   Leader: 1007    Replicas: 1007,1010,1006        Isr: 1006,1007,1010
Topic: Ho_HTR_bvt     Partition: 42   Leader: 1008    Replicas: 1008,1006,1007        Isr: 1006,1007,1008
Topic: Ho_HTR_bvt     Partition: 43   Leader: 1009    Replicas: 1009,1007,1008        Isr: 1009,1007,1008
Topic: Ho_HTR_bvt     Partition: 44   Leader: 1010    Replicas: 1010,1008,1009        Isr: 1010,1009,1008

如何计算数量 -1007细绳 ?

或文件中的任何其他单词

答案1

使用您的示例数据:

$ grep -Fo 1007 file | wc -l
      19

该管道的部分grep将搜索字符串1007-F使用该标志是因为我们正在进行字符串比较,而不是正则表达式匹配)。由于该标志,它将在新行上返回字符串的每个单独实例-o。返回的行数由 计数wc -l

如果该字符串在输入数据的一行中出现两次,则将计算两次。如果该字符串作为另一个单词的子字符串出现,它也会被计算在内。

awk

$ awk -v str="1007" '{ c += gsub(str, str) } END { print c }' file
19

这会计算字符串出现的次数gsub()(该函数返回执行替换的次数,我们将其单独应用于每个输入行)并在最后打印总计数。我们感兴趣的字符串通过命令行传递-v str="1007"

答案2

如果需要使用awk,可以使用以下命令:

awk '{for (i=1;i<=NF;i++) if ( $i == "word/number that you want to search") c++ }'END'{print c}' filename

答案3

命令:

awk '{print gsub("1007",$0)}' filename | awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'

-0-praveenk_22@:~ $ 

输出

awk '{print gsub("1007",$0)}' u.txt | awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'
19
-0-praveenk_22@:~ $

相关内容