在 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