免费注册 查看新帖 |

Chinaunix

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

[数值计算] shell 取出Bejing人的平均年龄 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-06 16:46 |只看该作者 |倒序浏览
两个文件格式如下,取出Beijing人的平均年龄
  1. Mr Wong Beijing
  2. Mr Lee  Taiyuan
  3. Mr Liou Beijing
  4. Mr Yang Beijing
复制代码
  1. Mr Wong 20
  2. Mr Lee  21
  3. Mr Liou 22
  4. Mr Yang 30
复制代码
shell我这么写
  1. paste file1 file2 |awk -F"\t" '{if($2~/Beijing/) print $0}'|awk '{a+=$4}END{print a/NR}'
复制代码
取出来总是0
然后我改成
  1. paste file1 file2 |awk -F"\t" '{if($2~/Beijing/) print $4}'|awk '{a+=$1}END{print a/NR}'
复制代码
,这样就能取出平均年龄,为什么在awk中进行第四列相加就是不可以

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2014-05-06 16:54 |只看该作者
回复 1# sakurazensen

$ awk -vA="Beijing" 'NR==FNR{if($3==A)a[$1,$2]=1;next}{if(a[$1,$2]){s+=$3;c++}}END{print s/c}' file1 file2
24
   

论坛徽章:
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
3 [报告]
发表于 2014-05-06 16:55 |只看该作者
paste之后一共有六列

论坛徽章:
2
巨蟹座
日期:2014-03-24 14:38:32卯兔
日期:2014-05-09 11:11:33
4 [报告]
发表于 2014-05-06 17:00 |只看该作者
awk 'NR==FNR{a[$1,$2]=$3} NR!=FNR && a[$1,$2] {print $0,a[$1,$2]}' a b|grep "Beijing"|awk '{sum+=$3} END {print "average = " sum/NR}'

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
5 [报告]
发表于 2014-05-06 17:02 |只看该作者


吓一跳,paste之后那个age不是$4吧,

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2014-05-06 17:05 |只看该作者
回复 1# sakurazensen

$ paste file1 file2 |awk -F"\t" '{if($2~/Beijing/)print $0}'

There is no data output
Note: Bejing on the file1

   

论坛徽章:
2
巨蟹座
日期:2014-03-24 14:38:32卯兔
日期:2014-05-09 11:11:33
7 [报告]
发表于 2014-05-06 17:05 |只看该作者
本帖最后由 yanghaiquan 于 2014-05-06 17:07 编辑

paste a b|awk  '{if($3~/Beijing/) print $NF}'|awk '{a+=$1}END{print a/NR}'

论坛徽章:
0
8 [报告]
发表于 2014-05-06 17:09 |只看该作者
合并之后是4行,awk指定的是tab作分隔符的。
yestreenstars 发表于 2014-05-06 16:55
paste之后一共有六列

论坛徽章:
0
9 [报告]
发表于 2014-05-06 17:18 |只看该作者
file1的文件格式是称谓\tab地区,file2的文件格式称谓\tab年龄 awk指定-F“\t” ,所以合并后只有4列
sakurazensen 发表于 2014-05-06 16:46
两个文件格式如下,取出Beijing人的平均年龄shell我这么写取出来总是0
然后我改成,这样就能取出平均年龄, ...

论坛徽章:
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
10 [报告]
发表于 2014-05-06 17:25 |只看该作者
回复 8# sakurazensen

paste file1 file2 |awk -F"\t" '{if($2~/Beijing/) print $0}'|awk '{a+=$4}END{print a/NR}'

改成

paste file1 file2 |awk -F"\t" '{if($2~/Beijing/) print $0}'|awk -F '\t' '{a+=$4}END{print a/NR}'
   
试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP