之前的介绍中提到 awk 可以通过 -v 选项引用外部变量,这里实践一下:
read sum3 sum4 < sum # 读取文件名为 sum 的文件,并指定变量 sum3 和 sum4
cat count | while read num last # 读取文件名为 count 的文件,并指定变量 num 和 last
do
echo "Processing line: $num $last" # 每一行处理完之前屏幕输出一句话,表明在正常运行
awk -v t=$last -v sum3=$sum3 -v sum4=$sum4 -F ',' '$23==t {s3 += $3; s4 += $4} END {print s3/sum3 "\t" s4/sum4 "\t" t}' test.csv >> result.txt
done
脚本内容不多解释,比较简单,这里说一下这两句话的区别;
'$23==t {s3 += $3; s4 += $4} END {print s3/sum3 "\t" s4/sum4 "\t" t}'
'$23==t {s3 += $3; s4 += $4; print s3/sum3 "\t" s4/sum4 "\t" t}'
前者是对文件整体第三列和第四列求和,最后输出;
后者是每一行如此进行,随即输出,第一行就是第一行的第三列除以总和,第二行就是文件前两行求和然后除以总和,一行计算完随即输出一行,然后再计算第二行,输出第二行。
网友评论