![awk + 计算文件中的字符串](https://linux22.com/image/145985/awk%20%2B%20%E2%80%8B%E2%80%8B%E8%AE%A1%E7%AE%97%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我们有这样的巨大文件
这是文件中的部分列表
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@:~ $