我正在尝试用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,我不知道它从哪里来。非常感谢任何帮助。
答案 0 :(得分:1)
Shell awk
脚本中未扩展Shell变量。 $weirdconst
将weirdconst
视为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"}'