免费注册 查看新帖 |

Chinaunix

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

统计的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-28 07:15 |只看该作者 |倒序浏览
cat 1.txt
2007/01/01 5001 changhong1 5000.00
2007/01/01 5002 changhong2 5230.00
2007/01/01 5010 sony1 6800.00
2007/01/01 5001 changhong1 4980.00
2007/01/02 5009 changhong1 4980.00
2007/01/03 5001 haier 2030.00

cat 2.txt
5001 zhangyu
5009 sunxiao
5002 zhanghui
5010 wanghui

表1中分别是日期;员工代码;产品名称;金额表2:员工代码;姓名
如何把2.txt中的姓名合并到1.txt当中。
统计出表1中员工当日销售额大于5000元的记录。

谢谢了,小妹在着有理了。

论坛徽章:
0
2 [报告]
发表于 2007-01-28 11:53 |只看该作者
sort -k 2 1.txt>1.new;sort 2.txt>2.new;join -1 2 1.new 2.new | awk '{if ($4 >=5000) print $0}'

reference:
http://www.oracle.com/technology ... ney_extracting.html

[ 本帖最后由 tanyear 于 2007-1-28 11:54 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-01-28 14:15 |只看该作者
谢谢楼上大哥;都怪我没有说明白。
统计出表1中员工当日销售额大于5000元的记录。(也包含2007/01/01 5001 changhong1 4980.00这条记录。

[ 本帖最后由 sxz001 于 2007-1-28 14:16 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-01-28 16:44 |只看该作者
  1. awk 'NR==FNR{name[$1]=$2;}NR>FNR{if($4>=5000){a[$2]++;}if(a[$2]>0){print $1,name[$2],$3,$4}}' 2.txt 1.txt
复制代码


2007/01/01 zhangyu changhong1 5000.00
2007/01/01 zhanghui changhong2 5230.00
2007/01/01 wanghui sony1 6800.00
2007/01/01 zhangyu changhong1 4980.00
2007/01/03 zhangyu haier 2030.00

论坛徽章:
0
5 [报告]
发表于 2007-01-28 17:02 |只看该作者
谢谢会员UID:434853大哥。

论坛徽章:
0
6 [报告]
发表于 2007-01-28 17:25 |只看该作者
1.如何把2.txt中的姓名合并到1.txt当中。
2.统计出表1中每个员工当日销售额合计大于5000元记录。
3.能否对1.txt中多列同时进行排序,比方的一段升序,第二段升序,第三段降序。

1.
  1. join -1 2 -2 1 -o 1.1 1.2 2.2 1.3 1.4 <(sort -k2,2n 1.txt) <(sort -k1,1n 2.txt)
复制代码

2.合计大于5000,那么如果有三条记录合计超过5000,这三条记录都要打印?
3.
  1. sort -k1,1 -k2,2nr -k3,3 1.txt
复制代码

论坛徽章:
0
7 [报告]
发表于 2007-01-28 17:40 |只看该作者
2.合计大于5000,那么如果有三条记录合计超过5000,这三条记录都要打印?

只要是个人当日销售累计超过5000,所有记录,就是单笔记录200元也都要。

谢谢啦。

论坛徽章:
0
8 [报告]
发表于 2007-01-28 17:50 |只看该作者
2.
  1. join -1 2 -2 1 -o 1.1 1.2 2.2 1.3 1.4 <(sort -k2,2n 1.txt) <(sort -k1,1n 2.txt) | awk '{a[$3]+=$5;b[$3]=b[$3] $0 "\n"}END{for(i in a) if(a[i]>5000) print b[i]}'
复制代码


只对1.txt处理的话,直接
  1. awk '{a[$2]+=$4;b[$2]=b[$2] $0 "\n"}END{for(i in a) if(a[i]>5000) print b[i]}' 1.txt
复制代码

[ 本帖最后由 一梦如是 于 2007-1-28 17:58 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-01-28 19:21 |只看该作者
  1. awk '
  2. FILENAME == "2.txt" { accounts[$1] = $2; }
  3. FILENAME == "1.txt" {
  4.         sum[$2] += $NF;
  5.         line[$2, count[$2]++] = $0 " " accounts[$2];
  6. }
  7. END {
  8.         for (id in accounts) if (sum[id] >= 5000)
  9.                 for (i = 0; i < count[id]; i++) print line[id,i];
  10. }' 2.txt 1.txt
复制代码

论坛徽章:
0
10 [报告]
发表于 2007-01-28 19:46 |只看该作者
原帖由 一梦如是 于 2007-1-28 17:50 发表
2.
  1. join -1 2 -2 1 -o 1.1 1.2 2.2 1.3 1.4 <(sort -k2,2n 1.txt) <(sort -k1,1n 2.txt) | awk '{a[$3]+=$5;b[$3]=b[$3] $0 "\n"}END{for(i in a) if(a[i]>5000) print b[i]}'
复制代码


...


谢谢你的帮助,没有结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP