免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9818 | 回复: 16
打印 上一主题 下一主题

[文本处理] awk文件每一行所有列数据求和 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-25 11:23 |只看该作者 |倒序浏览
我的文件内容如下:
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

论坛徽章:
0
2 [报告]
发表于 2014-02-25 11:26 |只看该作者
回复 1# pdzcowboy
把sum清掉就是了
  1. cat myfile|awk '{sum=0;for(i=1;i<=NF;i++)sum+=$i;print $0,sum}'
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-02-25 11:30 |只看该作者
谢谢了回复 2# runintostar


   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2014-02-25 11:33 |只看该作者
  1. awk '{for(i=0;i++<NF;)a[NR]+=$i;print $0,a[NR]}'
复制代码
or
  1. awk '{for(i=0;i++<NF;)sum+=$i;print $0,sum;sum=0}'
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-02-25 11:37 |只看该作者
谢谢了,但我求出的平均值怎么没有小数点了,全是整数了回复 4# yestreenstars


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [报告]
发表于 2014-02-25 11:49 |只看该作者
回复 5# pdzcowboy

可以换成 printf(); 格式化打印,不要用print


   

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
7 [报告]
发表于 2014-02-25 11:58 |只看该作者
回复 5# pdzcowboy
平均值是3,没小数位的,想要指定小数位,
可以用printf,大概这样的。
  1. awk '{for(i=0;i++<NF;)sum+=$i;printf "%s\t%d\t%.2f\n",$0,sum,sum/NF;sum=0}' myfile
  2. 1 2 3 4 5        15        3.00
  3. 1 2 3 4 5        15        3.00
  4. 1 2 3 4 5        15        3.00
  5. 1 2 3 4 5        15        3.00
  6. 1 2 3 4 5        15        3.00
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2014-02-25 12:02 |只看该作者
回复 5# pdzcowboy

把你写的脚本贴出来看看~
   

论坛徽章:
0
9 [报告]
发表于 2014-02-25 12:49 |只看该作者
  1. cat input | perl -lane '{foreach(@F){$sum+=$_}print $sum;}'
复制代码

论坛徽章:
0
10 [报告]
发表于 2014-02-25 14:18 |只看该作者
  1. cat myfile|awk '{for(i=1;i<=NF;i++)sum+=$i;print $0,sum/NF;sum=0}'
  2. 162616.534758647 136543.71100776 112965.741246305 137375
  3. 85181.9193508478 204094.759382577 171434.344233055 153570
  4. 128583.994276291 141911.700271563 126981.817796069 132493
  5. 171259.827021216 206842.518859144 188080.600873984 188728
复制代码

最后一列得到的平均值取整了回复 8# yestreenstars



   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP