【发布时间】:2015-08-04 20:29:43
【问题描述】:
我正在整理一个 (g)awk 文件脚本,该脚本循环遍历输入文件中提供的数字数据,并且必须对每一行中的值求和。我正在创建一个数组并将行和添加到每个数组位置。下面是我的代码。逻辑似乎没问题,但输出关闭:
for(i = 1; i <= NF; ++i){
for(j = 1; j <= NR; ++j){
row[i] += $j
}
}
【问题讨论】:
标签: awk
我正在整理一个 (g)awk 文件脚本,该脚本循环遍历输入文件中提供的数字数据,并且必须对每一行中的值求和。我正在创建一个数组并将行和添加到每个数组位置。下面是我的代码。逻辑似乎没问题,但输出关闭:
for(i = 1; i <= NF; ++i){
for(j = 1; j <= NR; ++j){
row[i] += $j
}
}
【问题讨论】:
标签: awk
您不能循环遍历这些行。通过行的循环由awk 在读取文件时隐式完成。
所以你只需要更新当前行的数组中的值:
awk '{for (i=1;i<=NF;i++) a[i]+=$i}' file
然后,您可以在END 块内打印摘要。
看一个例子:
$ cat a
1 2 3 4 5
6 7 8 9 10
$ awk '{for (i=1;i<=NF;i++) a[i]+=$i} END {for (i in a) print i " -> " a[i]}' a
1 -> 7
2 -> 9
3 -> 11
4 -> 13
5 -> 15
【讨论】:
awk '{sum=0; for (i=1;i<=NF;i++) sum+=$i; print sum}' file 之类的就可以了。