计算 awk 中表达式为 true 的次数。

计算 awk 中表达式为 true 的次数。

在 unix/awk 代码中

本质上,我需要遍历文件(data1.txt)并计算文件每一行的 substr($0,29,2) ==“04”的次数。

数据1.txt:

6597243042 20160305001100003140152852153019000127000200
6597243042 20160305001100003140170306190306020000000200
6597243042 20160305001100003140170552190552020000000200
6597243042 20160305001100003140201430201543000113000400
6592311319 20160305041100003460072719072839000120001200
6592311319 20160305041100003460072927072952000025001200

在这种情况下,文件 (data1.txt) 中只有 2 行满足条件 (substr($0,29,2)=="04")

我一直在寻找一种方法来做到这一点

下面是我的 unix/awk 代码

Filename="def"
file="data1.txt"
#awk '{count1=0}'
while IFS= read line
do

   awk '{ if (substr($0,29,2)=="04") {print substr($0,29,4)}}' 

done <"$file"

我该如何计算这个?

答案1

另一种方法(感谢Archemar + kos避免使用 deprecatedegrep和 using -c

grep -cE '^.{28}04' data1.txt

答案2

只是尝试

awk 'BEGIN { count = 0 ;} substr($0,29,2) == "04" { count++ ; } END { print count ;}' files

在哪里

  • substr($0,29,2) == "04"搜索条件
  • { count++ ; } 如果发现增加计数
  • END在最后
  • { print count ;}打印它。

编辑:

  • count=0感谢@steeldriver

为了便于阅读,可以按如下方式输入 awk 命令行。

awk 'BEGIN { count = 0 ;} 
     substr($0,29,2) == "04" { count++ ; } 
     END { print count ;}' files

相关内容