下午好
我想在 awk 中对每一列和每一行进行累加。
我的文件是:
1 2 3 4
2 5 6 7
2 3 6 5
1 2 1 2
我想:每列
1 2 3 4
3 7 9 11
5 10 15 16
6 12 16 18
6 12 16 18
我想:每行
1 3 5 9 9
2 7 13 20 20
2 5 11 16 16
1 3 4 6 6
我做了每列的总和:
awk '{ for (i=1; i<=NF; ++i) sum[i] += $i}; END { for (i in sum) printf "%s ", sum[i]; printf "\n"; }' test.txt # sum
每行。
awk '
BEGIN {FS=OFS=" "}
{
sum=0; n=0
for(i=1;i<=NF;i++)
{sum+=$i; ++n}
print $0,"sum:"sum,"count:"n,"avg:"sum/n
}' test.txt
但是我想打印所有的行和列。
你有什么想法吗?
最佳答案
看起来您拥有所有可用的正确信息,您所缺少的只是打印输出声明。
这是您要找的吗?
列的累计和:
% cat foo
1 2 3 4
2 5 6 7
2 3 6 5
1 2 1 2
% awk '{ for (i=1; i<=NF; ++i) {sum[i]+=$i; $i=sum[i] }; print $0}' foo
1 2 3 4
3 7 9 11
5 10 15 16
6 12 16 18
累计行数:
% cat foo
1 2 3 4
2 5 6 7
2 3 6 5
1 2 1 2
% awk '{ sum=0; for (i=1; i<=NF; ++i) {sum+=$i; $i=sum }; print $0}' foo
1 3 6 10
2 7 13 20
2 5 11 16
1 3 4 6
这两个都使用了以下内容:
- 默认情况下每个变量的值为
0
(如果以数字形式使用) - 我将字段
$i
替换为sum
值 - 我用
print $0
重新打印整行
关于awk 在维度上的累计和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48447694/