如何使用AWK计算CSV文件相邻两行第二列的百分比变化
正确实现方案
直接使用以下单行awk命令即可:
awk -F, 'NR==1 {old=$2} NR==2 {new=$2} END {printf "%.1f%%\n", ((old-new)/old)*100}' coun11.csv
输出验证
针对你给出的示例文件,执行后输出结果为:
11.2%
完全符合需求。
原命令错误原因
BEGIN块是awk读取文件内容前执行的逻辑,此时还没有加载任何行数据,你在BEGIN块中判断NF、赋值a和b的逻辑完全不会生效- 没有指定字段分隔符,awk默认按空格分割字段,你的csv是逗号分隔格式,因此
$2根本取不到第二列的数值 - 计算百分比的逻辑放在了每行执行的通用块中,第一行读取时
b还没有赋值,计算结果必然错误 - 格式化规则设置不符合要求,要保留1位小数应该用
%.1f格式,要输出%符号需要在printf中用%%转义
内容的提问来源于stack exchange,提问作者vkeeWorks
相关产品推荐
相关产品推荐

