免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何用最简单的方法,完成这个求平均值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-20 07:58 |只看该作者 |倒序浏览
  1. cat file | grep abcd | awk '{sum+=$2}END{print sum/NR}'
复制代码
上面的代码是求grep abcd的第二列的平均值。那么如果file中没有abcd,则平均值返回0,还如何操作啊?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2013-08-20 08:10 |只看该作者
  1. awk '/abcd/{s+=$2}END{print s/NR}' file
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-08-20 09:14 |只看该作者
本帖最后由 秋天的絮儿 于 2013-08-20 09:16 编辑
  1. ssh@cctv[47]:% cat 99
  2. a       1
  3. b       2
  4. c       2
  5. d       4
  6. a       3
  7. ssh@cctv[48]:% awk '/a/{s+=$2}END{print s/NR}' 99
  8. 0.8
复制代码
回复 2# Shell_HAT


其实按照题意我需要得到的答案是  2

NR读这组数据时是读到最后,5 ,将4/5=0.8.

而我需要得到的是4/2=2.是不是应该用 NF

   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
4 [报告]
发表于 2013-08-20 09:22 |只看该作者
回复 3# 秋天的絮儿
  1. ssh@cctv[47]:% cat 99
  2. a       1
  3. b       2
  4. c       2
  5. d       4
  6. a       3
  7. ssh@cctv[48]:% awk '/a/{s+=$2;n++}END{print s/n}' 99
  8. 2
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-08-20 09:45 |只看该作者
本帖最后由 秋天的絮儿 于 2013-08-20 09:46 编辑

回复 4# 关阴月飞


    ssh@cctv[47]:% cat 99
a       1
b       2
c       2
d       4
a       3
ssh@cctv[48]:% awk '/a/{s+=$2;n++}END{print s/n}' 99
2

如果 我需要
  1. awk '/e/{s+=$2;n++}END{print s/n}' 99
复制代码
输出结果为0.   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
6 [报告]
发表于 2013-08-20 09:56 |只看该作者
回复 5# 秋天的絮儿
  1. awk '/e/{s+=$2;n++}END{if(n)print s/n;else print 0}' file
复制代码

论坛徽章:
0
7 [报告]
发表于 2013-08-20 10:06 |只看该作者
回复 6# 关阴月飞

  1. ssh@cctv[125]:% cat 99
  2. 288XH-2 98.24  rvc019_19.00X14.00
  3. 297XH-2 98.43  rvc019_19.33X14.33
  4. 297XH-1 97.43  rvc019_19.33X14.33
  5. 01H-2 99.06  rvc019_19.00X14.00
  6. 39H 97.31  rvc019_19.00X14.00
  7. 88XH-1 98.62 rvc019_19.00X14.00
  8. 7H-2 99.05  rvc019_19.00X14.00
  9. 97XH-1 44.22 rvc019_19.00X14.00
  10. 78H-1 98.92  rvc019_19.00X14.00
  11. 6H-S2 99.30 rvc019_19.00X14.00
  12. ssh@cctv[126]:% cat 99 | awk '/rvc019_19.00X14.00/{s+=$2}END{print s/NF}'
  13. 244.907
复制代码
为什么会出现这个结果啊,按道理应该求的平均值啊。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
8 [报告]
发表于 2013-08-20 10:15 |只看该作者
本帖最后由 关阴月飞 于 2013-08-20 10:16 编辑

回复 7# 秋天的絮儿

LZ你赢了,我已经不知道你想干什么了:
  1. awk '/过滤关键字/{s+=$2;n++}END{if(n)print s/n;else print 0}' file
复制代码

论坛徽章:
0
9 [报告]
发表于 2013-08-20 10:35 |只看该作者
回复 8# 关阴月飞


    呵呵,不是,不是,你的回答我已经看到了,已经达到目的了。我是说我试7l楼的那个为什么会是那样的结果。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
10 [报告]
发表于 2013-08-20 10:45 |只看该作者
本帖最后由 关阴月飞 于 2013-08-20 10:46 编辑

回复 9# 秋天的絮儿


NF 记录的是每一行有多少列

cat 99 | awk '/rvc019_19.00X14.00/{s+=$2}END{print s/NF}'

你这里的NF 是指文件最后一行的列数, 用s/NF得出来的值,和平均值一毛钱关系都没有。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP