免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1166 | 回复: 8

[文本处理] 流水账按用户统计购买物品次数,能用shell搞定吗? [复制链接]

论坛徽章:
0
发表于 2017-03-03 10:11 |显示全部楼层
写这个帖子有点无耻啊.有问题就会想来cu上问,从来没做过贡献,都有点不好意思了...
=========================================
流水账是这样的:

ID;物品
1;物品1
2;物品1
1;物品3
1;物品1
3;物品2
2;物品3
3;物品8
...
-------------------
要求的结果是:
ID;物品:次数
1;物品1:2;物品3:1;
2;物品1:1;物品3:1;
3;物品2:1;物品8:1;
--------------------------------------------------
虽然可以用python实现,不过我还是想问问,,这个处理能用shell实现吗?

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2017-03-03 10:38 |显示全部楼层
  1. awk -F';' '/^[0-9]/{a[$1][$2]++}END{for(i in a){s=i;for(j in a[i]){f=j":"a[i][j];n=n?n";"f:f};print s";"n;n=c}}' a
  2. 1;物品1:2;物品3:1
  3. 2;物品1:1;物品3:1
  4. 3;物品8:1;物品2:1
复制代码

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2016-10-26 16:19:04
发表于 2017-03-03 10:43 |显示全部楼层
awk -F';' 'NR>=2{a[$0]++}END{for(i in a)print i":"a[i]";"}' 3 |awk -F';' '{a[$1]=a[$1]" "$2";"}END{for(i in a)print i";",a[i]}'

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-03-03 10:51 |显示全部楼层
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hData = ();
  5. <DATA>;
  6. while (<DATA>){
  7.         chomp (my ($id, $product) = split (/;/));
  8.         $hData{$id}{$product}++;
  9. }

  10. foreach my $id (sort {$a <=> $b} keys %hData){
  11.         my $item = '';
  12.         while (my ($product, $count) = each %{$hData{$id}}){
  13.                 $item .= "$product:$count;";
  14.         }
  15.         print "$id;$item\n";
  16. }

  17. __DATA__
  18. ID;ProductName
  19. 1;Product1
  20. 2;Product1
  21. 1;Product3
  22. 1;Product1
  23. 3;Product2
  24. 2;Product3
  25. 3;Product8
复制代码

论坛徽章:
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
发表于 2017-03-03 10:57 |显示全部楼层
本帖最后由 jason680 于 2017-03-03 10:59 编辑

回复 1# casio1374633

>> 写这个帖子有点无耻啊. ...

果真无耻,有问无回
http://bbs.chinaunix.net/thread-4233762-1-1.html
http://bbs.chinaunix.net/thread-4188064-1-1.html

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
发表于 2017-03-03 11:03 |显示全部楼层
那个sql 的可能是个面试题

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-03-03 11:38 |显示全部楼层

  1. #gawk 4.0+
  2. awk -F';' '/^[0-9]/{a[$1][$2]++}END{for(i in a){printf i FS;for(j in a[i])printf j":"a[i][j] FS;print""}}'
复制代码

论坛徽章:
0
发表于 2017-03-03 11:54 |显示全部楼层
jason680
--------------
特地过来回复一下,对不起jason680,我看到你的头像就知道你以前也回过我的帖子,抱歉我太无耻了.....啊啊啊啊啊啊....我自己都感觉好混蛋啊...
----------------
谢谢楼上的各位~~~

论坛徽章:
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
发表于 2017-03-03 12:20 |显示全部楼层
回复 8# casio1374633

这是为人处事...

你不是对不起我...
你对不起的人可多了
1. 对不起回帖之人
2. 对不起长辈父母教导
3. 对不起学校教育老师
...

多看几帖...
在CU无回帖,不知回帖之人 可多了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP