gpt4 book ai didi

awk 对多列求和

转载 作者:行者123 更新时间:2023-12-04 22:05:01 26 4
gpt4 key购买 nike

如何计算所有单个列(115 列)的 SUM?

输入.txt

1st,2nd,3rd,4th,5th,Till-115thColumn
51,34,27,67,88,99
56,39,32,72,93,104
66,49,42,82,103,114

输出.txt
1st,2nd,3rd,4th,5th,Till-115thColumn
173,122,101,221,284,317

我试过这个命令:
awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1 i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' Input.txt

但我没有得到所需的输出。

最佳答案

这可以是一种方式:

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++) printf a[i] OFS; printf "\n"}' file

它将逗号设置为输入/输出字段分隔符,然后将每列的总和存储在数组 a[] 中。最后,它遍历结果并打印出来。注意 NR==1 是用户打印标题。

对于您给定的输入,它返回:
$ 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++) printf a[i] OFS; printf "\n"}' file
1st,2nd,3rd,4th,5th,Till-115thColumn
173,122,101,221,284,317,

为什么你的脚本不起作用?

因为你在 ; 声明中遗漏了一个 for:
awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1 i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' a
awk: line 1: syntax error at or near )

所以这使它:
$ awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1; i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' file
^
174
124
104
225
289
317

关于awk 对多列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22042400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com