awk维度上的累积总和 [英] awk cumulative sum in on dimension
问题描述
下午好,
我想对awk中的每一列和每一行进行累加.
I would like to make a cumulative sum for each column and line in awk.
我的文件是:
1 2 3 4
2 5 6 7
2 3 6 5
1 2 1 2
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 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
1 3 5 9 9
2 7 13 20 20
2 5 11 16 16
1 3 4 6 6
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
但是我想打印所有的行和列.
But I would like to print all the lines and columns.
你有个主意吗?
推荐答案
您似乎拥有所有可用的正确信息,而您所缺少的只是打印输出语句.
It looks like you have all the correct information available, all you are missing is the printout statements.
这是您要寻找的吗?
列的总和:
% 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
这两个都使用以下内容:
Both these make use of the following :
- 每个变量的默认值均为
0
(如果用于数字方式) - 我将字段
$i
替换为sum
值 - 我用
print $0
重印整行
- each variable has value
0
by default (if used numerically) - I replace the field
$i
with what thesum
value - I reprint the full line with
print $0
这篇关于awk维度上的累积总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!