Chinaunix
标题:
awk文件每一行所有列数据求和
[打印本页]
作者:
pdzcowboy
时间:
2014-02-25 11:23
标题:
awk文件每一行所有列数据求和
我的文件内容如下:
cat myfile
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
如果列不多的话,我求和写法如下:
cat myfile |awk '{sum=$1+$2+$3+$4+$5;print $0,sum}'
1 2 3 4 5 15
1 2 3 4 5 15
1 2 3 4 5 15
1 2 3 4 5 15
1 2 3 4 5 15
如果列很多的话,我想引进循环来求和,但貌似每个记录的SUM一直在累加,我想请问一下怎么改才可以得到上面一样的结果(每一行单独一个求和)?谢谢了
cat myfile|awk '{for(i=1;i<=NF;i++)sum+=$i;print $0,sum}'
1 2 3 4 5 15
1 2 3 4 5 30
1 2 3 4 5 45
1 2 3 4 5 60
1 2 3 4 5 75
作者:
runintostar
时间:
2014-02-25 11:26
回复
1#
pdzcowboy
把sum清掉就是了
cat myfile|awk '{sum=0;for(i=1;i<=NF;i++)sum+=$i;print $0,sum}'
复制代码
作者:
pdzcowboy
时间:
2014-02-25 11:30
谢谢了
回复
2#
runintostar
作者:
yestreenstars
时间:
2014-02-25 11:33
awk '{for(i=0;i++<NF;)a[NR]+=$i;print $0,a[NR]}'
复制代码
or
awk '{for(i=0;i++<NF;)sum+=$i;print $0,sum;sum=0}'
复制代码
作者:
pdzcowboy
时间:
2014-02-25 11:37
谢谢了,但我求出的平均值怎么没有小数点了,全是整数了
回复
4#
yestreenstars
作者:
这个冬天不冷
时间:
2014-02-25 11:49
回复
5#
pdzcowboy
可以换成 printf(); 格式化打印,不要用print
作者:
Herowinter
时间:
2014-02-25 11:58
回复
5#
pdzcowboy
平均值是3,没小数位的,想要指定小数位,
可以用printf,大概这样的。
awk '{for(i=0;i++<NF;)sum+=$i;printf "%s\t%d\t%.2f\n",$0,sum,sum/NF;sum=0}' myfile
1 2 3 4 5 15 3.00
1 2 3 4 5 15 3.00
1 2 3 4 5 15 3.00
1 2 3 4 5 15 3.00
1 2 3 4 5 15 3.00
复制代码
作者:
yestreenstars
时间:
2014-02-25 12:02
回复
5#
pdzcowboy
把你写的脚本贴出来看看~
作者:
polyahu
时间:
2014-02-25 12:49
cat input | perl -lane '{foreach(@F){$sum+=$_}print $sum;}'
复制代码
作者:
pdzcowboy
时间:
2014-02-25 14:18
cat myfile|awk '{for(i=1;i<=NF;i++)sum+=$i;print $0,sum/NF;sum=0}'
162616.534758647 136543.71100776 112965.741246305 137375
85181.9193508478 204094.759382577 171434.344233055 153570
128583.994276291 141911.700271563 126981.817796069 132493
171259.827021216 206842.518859144 188080.600873984 188728
复制代码
最后一列得到的平均值取整了回复
8#
yestreenstars
作者:
jason680
时间:
2014-02-25 14:42
回复
10#
pdzcowboy
print %s, sum/NF
chang to
printf("%s %f\n",$0,sum/NF)
作者:
Herowinter
时间:
2014-02-25 14:44
回复
10#
pdzcowboy
改成这样
cat myfile|awk '{for(i=1;i<=NF;i++)sum+=$i;printf "%s\t%f\n",$0,sum/NF;sum=0}'
162616.534758647 136543.71100776 112965.741246305 137375.329004
85181.9193508478 204094.759382577 171434.344233055 153570.340989
128583.994276291 141911.700271563 126981.817796069 132492.504115
171259.827021216 206842.518859144 188080.600873984 188727.648918
复制代码
作者:
yaozhibing41001
时间:
2014-02-25 14:48
本帖最后由 yaozhibing41001 于 2014-02-25 14:51 编辑
回复
10#
pdzcowboy
# awk '{for(i=1;i<=NF;i++)sum+=$i;printf "%s %.2f\n",$0,sum/NF;sum=0}' file
复制代码
作者:
yestreenstars
时间:
2014-02-25 15:45
回复
10#
pdzcowboy
awk '{for(i=0;i++<NF;)s+=$i;printf "%s %f\n",$0,s/NF;s=0}'
复制代码
作者:
elu_ligao
时间:
2014-02-26 00:02
awk '{for(i=1;i<=NF;++i)a[NR]+=$i;printf "%s\t%f\n",$0,a[NR]/NF}'
作者:
kernel69
时间:
2014-02-28 22:51
perl的
$ cat 11
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
$ perl -MList::Util=sum -lane 'print "@F ".sum @F' 11
1 2 3 4 5 15
1 2 3 4 5 15
1 2 3 4 5 15
1 2 3 4 5 15
1 2 3 4 5 15
$
复制代码
回复
1#
pdzcowboy
作者:
rulebook
时间:
2014-03-03 13:40
awk '{s="";for(i=1;i<=NF;i++){s=s+$i};print $0,s}' o
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2