如何实现两个awk统计结果相减的逻辑?
错误原因
你原本的写法存在两个核心问题:
- 三个独立的
awk进程之间无法共享变量,前两个命令统计得到的count、count2不能直接传递给第三个awk使用 - 最后一个
awk命令没有指定输入源,也没有接收前两个命令的输出结果,无法完成计算
最优方案(单次遍历文件,效率最高)
只需要一次读取文件,同时统计两个指标,最后直接输出差值即可,不需要多次调用awk:
awk -F ',' ' $12 ~ /<WORD>/ {count++} $12 ~ /<WORD>/ && $13 ~ /<DATE>/ {count2++} END {print count - count2} ' file.csv
如果没有匹配到对应记录,变量默认值为0,不会出现计算错误。
备选方案(分两次统计再计算)
如果你确实需要分别得到两个统计值再做计算,可以先把统计结果存入shell变量,再用shell算术运算得到差值:
# 统计第一个指标,匹配不到时默认输出0 count=$(awk -F ',' '$12 ~ /<WORD>/ {c++} END {print c+0}' file.csv) # 统计第二个指标,匹配不到时默认输出0 count2=$(awk -F ',' '$12 ~ /<WORD>/ && $13 ~ /<DATE>/ {c++} END {print c+0}' file.csv) # 输出差值 echo $((count - count2))
内容的提问来源于stack exchange,提问作者AlphaK12
相关产品推荐
相关产品推荐

