awk维度上的累积总和 [英] awk cumulative sum in on dimension

查看:120
本文介绍了awk维度上的累积总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下午好,

我想对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 the sum value
  • I reprint the full line with print $0

这篇关于awk维度上的累积总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆