免费注册 查看新帖 |

Chinaunix

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

文本处理求教 [复制链接]

论坛徽章:
0
发表于 2012-10-08 16:53 |显示全部楼层
原文本   1.txt
csv1  211
csv3  234
csv2  123
csv1  1
想得到文本 1.txt
csv1  212
csv2  123
csv3  234
第一列相同的  合并    然后排序    请大虾们指教

论坛徽章:
0
发表于 2012-10-08 17:04 |显示全部楼层
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;
  4. my %hash;
  5. while (<DATA>) {
  6.         chomp;
  7.         my ($key,$value) = split /\s+/;
  8.          $hash{$key} += $value;
  9. }
  10. foreach (sort keys %hash) {
  11.         print "$_\t$hash{$_}\n";
  12. }
  13. <STDIN>;

  14. __DATA__
  15. csv1  211
  16. csv3  234
  17. csv2  123
  18. csv1  1
复制代码

论坛徽章:
0
发表于 2012-10-08 17:13 |显示全部楼层
回复 1# alexyuan881


     命令行:
  1. [jzha154@jzha154-linux ~]$ echo 'csv1  211
  2. csv3  234
  3. csv2  123
  4. csv1  1' | perl -ane '{ $h{$F[0]} += $F[1] } END{ print "$_\t$h{$_}\n" for sort keys %h }'
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
发表于 2012-10-11 12:53 |显示全部楼层
By awk
  1. awk '{a[$1]+=$2}END{for (i in a) print i,a[i] |"sort -n"}' 1.txt

  2. csv1 212
  3. csv2 123
  4. csv3 234
复制代码

论坛徽章:
0
发表于 2012-11-07 17:16 |显示全部楼层
看大牛的简洁代码来了

论坛徽章:
1
15-16赛季CBA联赛之北控
日期:2016-08-05 14:22:52
发表于 2012-11-11 08:36 |显示全部楼层
本帖最后由 唐归来 于 2012-11-11 19:45 编辑
  1. use strict;
  2. use warnings;

  3. open (IN,"1.txt") or die;
  4. open (OUT,"> result.txt") or die;

  5. my %hash;
  6. my $keys;

  7. while (<IN>)  {
  8. chomp;
  9. my @arr = split (' ',$_);
  10. if (exists $hash{$arr[0]}) {
  11. $hash{$arr[0]} += $arr[1];
  12. } else {$hash{$arr[0]} = $arr[1];}
  13. }

  14. foreach $keys (sort keys %hash) {
  15. print OUT "$keys $hash{$keys}\n";
  16. }

  17. close IN;
  18. close OUT;
复制代码

论坛徽章:
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
发表于 2016-11-26 13:24 |显示全部楼层
本帖最后由 moperyblue 于 2016-11-26 13:40 编辑

第一列按数字排序?
  1. echo 'csv11  211
  2. csv3  234
  3. csv2  123
  4. csv11  1'|awk '{a[$1]+=$2}END{for(i in a)print i,a[i]|"sort -k1.4n"}'  
复制代码

论坛徽章:
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
发表于 2016-11-26 13:35 |显示全部楼层
  1. perl -anle '{$h{$F[0]}+=$F[-1]}END{print "$_ $h{$_}" for sort keys %h}' f
复制代码

论坛徽章:
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
发表于 2016-11-26 13:47 |显示全部楼层
  1. sort f|perl -anle '{if(!$k){($k,$v)=@F;next}if($k eq $F[0]){$v+=$F[-1];next}print "$k\t$v";($k,$v)=@F}END{print "$k\t$v"}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP