列的总和与AWK无法正常工作

时间:2016-10-11 16:07:22

标签: bash awk

我正在尝试用CSV总结列并将常数除以总和,但似乎不对。

awk 'BEGIN{FS=OFS=","}
NR==1{print}
NR>1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<=NF;i++) if ( a[i] != 0 ) printf $wierdConst/a[i] OFS; printf "\n"}'

当我不做分工时,

awk 'BEGIN{FS=OFS=","}
NR==1{print}
NR>1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<=NF;i++) if ( a[i] != 0 ) printf a[i] OFS; printf "\n"}'

我得到的总数为6440349377,我的常数$wierdConst是39600000000.但是当除法完成后,我得到的全部是0.0160752,我不知道它从哪里来。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

Shell awk脚本中未扩展Shell变量。 $weirdconstweirdconst视为awk变量,$表示访问该字段编号。由于您从未设置weirdconst,因此会变为0,因此您正在打印$0/a[i]

使用-v选项从shell变量设置awk变量。

awk -v weirdconst=$weirdconst 'BEGIN{FS=OFS=","}
NR==1{print}
NR>1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<=NF;i++) if ( a[i] != 0 ) printf weirdConst/a[i] OFS; printf "\n"}'