Chinaunix
标题:
关于awk对每一列求和的问题,最好解释下思路,新手。。。
[打印本页]
作者:
Linux9253
时间:
2015-05-23 23:08
标题:
关于awk对每一列求和的问题,最好解释下思路,新手。。。
下面是文件
20 10 2
30 20 4
40 30 5
复制代码
求结果
90 60 11
复制代码
最好解释下思路,新手。。。
作者:
jason680
时间:
2015-05-23 23:36
回复
1#
Linux9253
to add them together ...
s1 for $1, s2 for $2, s3 for $3
$ awk '{s1+=$1;s2+=$2;s3+=$3}END{print s1,s2,s3}' FILE
90 60 11
作者:
Linux9253
时间:
2015-05-24 09:21
回复
2#
jason680
非常感谢你的回复、你的代码完全可以实现、但假如是很多列这样代码是不是不太简洁?有没有更简洁的代码实现?
谢谢。。。
作者:
Herowinter
时间:
2015-05-24 09:36
本帖最后由 Herowinter 于 2015-05-24 09:52 编辑
回复
3#
Linux9253
awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{s=a[1];for(i=2;i<=NF;i++)s=s" "a[i];print s}' urfile
复制代码
作者:
Linux9253
时间:
2015-05-24 10:17
回复
4#
Herowinter
好强悍的代码、谢谢哈、不知能否世界下思路或者代码呢
作者:
Herowinter
时间:
2015-05-24 11:03
回复
5#
Linux9253
就是把楼上的代码写成对每一列进行循环处理啊,最后把所得的和拼成一个
总的输出字符串。
作者:
jason680
时间:
2015-05-24 22:47
回复
3#
Linux9253
>> ...有没有更简洁的代码实现?
$ perl -lane '{$v[$_]+=$F[$_] for(0..$#F)}END{print "@v"}' FILE
90 60 11
作者:
lxh9090
时间:
2015-05-26 10:04
本帖最后由 lxh9090 于 2015-05-26 10:50 编辑
请问大神s=s" "a
这个代表什么意思呢
回复
4#
Herowinter
作者:
yestreenstars
时间:
2015-05-26 10:22
回复
8#
lxh9090
将结果用空格相连
作者:
Herowinter
时间:
2015-05-26 10:23
回复
8#
lxh9090
初始:
s=""
a[1]=90
a[2]=60
a[3]=11
过程:
s="90"
s="90"" ""60"
s="90 60"" ""11"
作者:
lxh9090
时间:
2015-05-26 10:54
哈哈,懂了,非常感谢你的详细回答
回复
10#
Herowinter
作者:
jason680
时间:
2015-05-26 11:05
回复
8#
lxh9090
s=66, a=33
s=s
a # s="6633" # combine "66" and "33
s=s
" "
a # s="66
33" # combine "66",
" "
, and "33"
s=s
+
a #s=99 # mathematics add
作者:
lxh9090
时间:
2015-05-26 11:09
恩,谢谢啊,
回复
12#
jason680
作者:
ch_hoho
时间:
2015-05-26 19:00
awk '{for(i=1;i<=NF;i++){a[i]+=$i}}END{for(i in a){printf a[i]" "}}' filename
复制代码
作者:
ch_hoho
时间:
2015-05-26 19:00
awk '{for(i=1;i<=NF;i++){a[i]+=$i}}END{for(i in a){printf a[i]" "}}' filename
复制代码
作者:
Windows19
时间:
2015-05-26 21:17
觉得楼主好美丽
作者:
reyleon
时间:
2015-05-29 10:27
awk '{if(max<NF)max=NF}{for(i=1;i<=NF;i++)a[i]+=$i}END{for(i=1;i<=max;i++)s=length(s)?s" "a[i]:a[i];print s}' file
复制代码
作者:
reyleon
时间:
2015-05-29 10:28
awk '{for(i=1;i<=NF;i++)a[i]+=$i}END{for(i=1;i<=length(a);i++)s=length(s)?s" "a[i]:a[i];print s}' file
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2