免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4064 | 回复: 11

[文本处理] 请教匹配、按行求和排序问题 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
发表于 2016-05-01 14:19 |显示全部楼层
本帖最后由 vcuteym 于 2016-05-01 14:22 编辑

待处理数据如下:
0.2  0.3  0.5    1
0.3  0.1   0.2   3
0.4  0.2   0.3   1
0.2  0.2   0.2    2
0.3  0.3   0.3    2
0.3   0.2   0.6   3
0.1   0.1   0.1   4
------------------------------------------
已知最后一列一定是正整数,最后一列最小值是1,最大值是已知的。数据处理要求:第一步,将最后一列相同的行相加(最后一列保持不变),如第2行和第6行最后一列都是3,两行相加得到 0.6  0.3  0.8  3(最后一列保持不变,不加!) 。第二步,按最后一列从小到大排序。

最后得到

0.6   0.5  0.8  1
0.5   0.5  0.5   2
0.6   0.3  0.8   3
0.1   0.1   0.1  4

谢谢!

论坛徽章:
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-05-01 14:59 |显示全部楼层
  1. awk '{for(i=1;i<NF;i++)a[$NF][i]+=$i}
  2. END{
  3.     for(i in a){
  4.         for(j in a[i]){
  5.             printf a[i][j] FS
  6.         }
  7.         print i
  8.     }
  9. }' file #gawk4.0+
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
发表于 2016-05-01 15:28 |显示全部楼层
回复 2# moperyblue

我的awk是3.15,不能用这个代码,还是谢谢你
   

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-14 06:20:00每日论坛发贴之星
日期:2015-10-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-08 06:20:00
发表于 2016-05-01 15:55 |显示全部楼层
本帖最后由 mswsg 于 2016-05-01 17:08 编辑

试试python   http://bbs.chinaunix.net/thread-4244175-1-1.html
  1. with open('1.txt', 'r') as f:
  2.     alist = []
  3.     d = {}
  4.     lines = f.readlines()
  5.     for line in lines:
  6.         line = line.strip().split()
  7.         alist.append(line)

  8.     for i in alist:
  9.         try:
  10.             d[i[3]] += i[:-1]
  11.         except KeyError:
  12.             d[i[3]] = i[:-1]
  13.     for course, score in d.items():
  14.         if len(score) > 3:
  15.             print course, float(score[0]) + float(score[3]), float(score[1]) + float(score[4]), \
  16.             float(score[2]) + float(score[5])
  17.         else:
  18.             print course, ' '.join(score)
复制代码

论坛徽章:
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
发表于 2016-05-01 16:11 |显示全部楼层
回复 1# vcuteym

$ awk '{k=$NF;b[k]=k;for(n=1;n<NF;++n)a[k,n]+=$n}END{t=asort(b);for(c=1;c<=t;++c){s="";k=b[c];for(n=1;n<NF;++n)s=s a[k,n]"\t";print s k}}' FILE
0.6        0.5        0.8        1
0.5        0.5        0.5        2
0.6        0.3        0.8        3
0.1        0.1        0.1        4


   

论坛徽章:
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-05-01 17:02 |显示全部楼层
本帖最后由 sunzhiguolu 于 2016-05-02 22:56 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. $" = "\t";
  5. my @aStat;
  6. open (my $fhR, 'sort -k4,4n f|') or die "File 'f' can't open!\n";
  7. while (defined (my $sLine  = <$fhR>)){
  8.     my @aLine = split / /, $sLine;
  9.     if (!@aStat){
  10.         @aStat = @aLine;
  11.         next;
  12.     }
  13.     if ($aStat[-1] == $aLine[-1]){
  14.         $aStat[$_] += $aLine[$_] for 0 .. $#aLine - 1;
  15.         next;
  16.     }
  17.     print "@aStat\n";
  18.     @aStat = @aLine;
  19. }
  20. close ($fhR);
  21. print "@aStat\n";
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
发表于 2016-05-01 21:58 |显示全部楼层
回复 5# jason680
还是你厉害,请给我推荐一本awk和sed方面书学习一下,谢谢!
   

论坛徽章:
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
发表于 2016-05-02 13:50 |显示全部楼层
回复 7# vcuteym

1. [学习共享]Linux相关书籍(2015-07-10:更新ksh)
http://bbs.chinaunix.net/thread-1776727-1-1.html
   
2. The GNU Awk User’s Guide

3. awk初学之常见问题
http://bbs.chinaunix.net/thread-2309494-1-1.html

4. awk数组的学习心得
http://bbs.chinaunix.net/thread-2312439-1-1.html

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
发表于 2016-05-02 22:17 |显示全部楼层
回复 6# sunzhiguolu
最后少了一句print "@aStat\n";

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 多谢提醒, 改正过来了.

查看全部评分

论坛徽章:
1
2015亚冠之萨济拖拉机
日期:2015-09-04 10:29:22
发表于 2016-05-02 23:49 |显示全部楼层
awk '{a[$4]+=$1;b[$4]+=$2;c[$4]+=$3}END{for(i in a) print a[i],b[i],c[i],i}' tt1 | sort -f"" -k4
0.6 0.5 0.8 1
0.5 0.5 0.5 2
0.6 0.3 0.8 3
0.1 0.1 0.1 4

试一下这个.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP