Chinaunix
标题:
awk 标签 列求和
[打印本页]
作者:
莫侠007
时间:
2014-11-27 14:16
标题:
awk 标签 列求和
原始文本:
QPS Commit Rollback TPS Threads_con Threads_run
1 0 0 0 31 1
14 0 0 0 31 1
15 0 0 0 31 1
45 0 0 0 31 1
1 0 0 0 31 1
1 0 0 0 31 1
1 0 0 0 31 1
1 0 0 0 31 1
15 0 0 0 31 1
要求输出:
QPS 93
Commit 0
Rollback 0
TPS 0
Threads_con 310
Threads_run 10
结果就是第一列当标签:从第二行后 列求和
作者:
莫侠007
时间:
2014-11-27 14:22
回复
1#
莫侠007
我想到的笨方法是:
awk '{if(NR>2){s1=s1+$1;s2=s2+$2;s5=s5+$5}} END {print "QPS",s1"\n""Commit",s2"\n""Threads_run",s5}' /data/logs/zabbix/mysql_status.log
能不能写个循环?
作者:
super皮波
时间:
2014-11-27 14:38
awk 'NR==1{for(i=1;i<=NF;i++)Tab[i]=$i}{for(i=1;i<=NF;i++)result[i]+=$i} END{for(i=1;i<=NF;i++)print Tab[i],result[i]}'
作者:
zxy877298415
时间:
2014-11-27 14:43
[ 本帖最后由 zxy877298415 于 2014-11-27 14:49 编辑 ]
awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i}FNR>1&&NR>FNR{for (i=1;i<=NF;i++) b[i]+=$i}END{for (i=1;i<=NF;i++) print a[i]":"b[i]}' file file
PS:94
Commit:0
Rollback:0
TPS:0
Threads_con:279
Threads_run:9
作者:
super皮波
时间:
2014-11-27 14:46
回复
4#
zxy877298415
我自己测试过了,我这个是基于一个文件的
awk 'NR==1{for(i=1;i<=NF;i++)Tab
=$i}{for(i=1;i<=NF;i++)result
+=$i} END{for(i=1;i<=NF;i++)print Tab
,result
}' 111
QPS 94
Commit 0
Rollback 0
TPS 0
Threads_con 279
Threads_run 9
作者:
莫侠007
时间:
2014-11-27 14:46
回复
4#
zxy877298415
不好意思 我文本贴少了一行
作者:
zxy877298415
时间:
2014-11-27 14:46
回复
5#
super皮波
恩,那我的多余了
作者:
super皮波
时间:
2014-11-27 14:48
回复
7#
zxy877298415
楼主的就是一个文本
作者:
关阴月飞
时间:
2014-11-27 14:50
awk 'NR==1{for(i=0;i++<NF;)a[i]=$i;next}{for(i=0;i++<NF;)b[i]+=$i}END{for(i=0;i++<NF;)print a[i],b[i]}' urfile
复制代码
作者:
莫侠007
时间:
2014-11-27 14:57
本帖最后由 莫侠007 于 2014-11-27 15:17 编辑
回复
5#
super皮波
Tab=$i 不是数组了,Tab
=$i才对 你上面写的
会自动把Tab[ i ]变成了 Tab
作者:
super皮波
时间:
2014-11-27 15:05
回复
10#
莫侠007
看我2楼,5楼的没复制好
作者:
莫侠007
时间:
2014-11-27 15:14
本帖最后由 莫侠007 于 2014-11-27 15:15 编辑
谢谢大家,
作者:
莫侠007
时间:
2014-11-27 15:22
回复
9#
关阴月飞
用next是个好习惯
作者:
jason680
时间:
2014-11-27 15:36
回复
1#
莫侠007
other idea ...
$ awk '{for(n=1;n<=NF;n++){
N=(NR==1);a[N,n]=(N==1)?$n:a[N,n]+$n
}}END{for(n=1;n<=NF;n++)print a[1,n],a[0,n]}' FILE
QPS 94
Commit 0
Rollback 0
TPS 0
Threads_con 279
Threads_run 9
作者:
莫侠007
时间:
2014-11-27 15:47
回复
14#
jason680
三元操作符
作者:
chengchow
时间:
2014-11-27 16:59
gentoo scripts # awk 'NR>1{for(i=1;i<=NF;i++){a[i]+=$i}}NR==1{for(i=1;i<=NF;i++){b[i]=$i}}END{for(i=1;i<=NF;i++){print b[i],a[i]}}' a
QPS 94
Commit 0
Rollback 0
TPS 0
Threads_con 279
Threads_run 9
复制代码
作者:
reyleon
时间:
2014-11-27 17:36
大众的方法
awk 'NR==1{for(i=1;i<=NF;i++)a[i]=$i;next}{for(i=1;i<=NF;i++)b[i]+=$i}END{for(i in b)print a[i],b[i]}'
复制代码
作者:
ch_hoho
时间:
2014-11-27 21:09
awk 'NR==1{for(i=1;i<=NF;i++)b[i]=$i;}NR>1{for(j=1;j<=NF;j++)a[j]+=$j}END{for(k in b){print b[k],a[k]}}'
最容易想到的
作者:
聆雨淋夜
时间:
2014-11-28 10:15
awk 'NR==1{split($0,a," ");next}{for(i=0;i++<NF;)b[i]+=$i}END{for(i in a)print a[i],b[i]}' 1.txt
复制代码
作者:
聆雨淋夜
时间:
2014-11-28 10:21
awk 'NR==1{for(i=0;i++<NF;)a[i]=$i;next}{for(i=0;i++<NF;)b[i]+=$i}END{for(i=0;i++<NF;)print a[i],b[i]}' 1.txt
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2