免费注册 查看新帖 |

Chinaunix

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

[文本处理] 分组求最小功能如何实现呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-11-06 17:54 |只看该作者 |倒序浏览
如下数据:
2016-09-02|a|91.56|89.72
2016-09-01|a|93.19|89.88
2016-08-31|a|88.03|81.28
2016-08-30|a|86.7|82.25
2016-08-29|a|79.53|77.8
2016-08-26|a|84.02|84.02
2016-08-25|a|76.38|76.38
2016-08-24|a|69.44|69.44
2016-08-23|a|63.13|63.13
2016-08-22|a|57.39|57.39
2016-08-19|a|52.17|52.17
2016-08-18|a|47.43|47.43
2016-08-17|a|43.12|43.12
2016-08-16|a|39.2|39.2
2016-08-15|a|35.64|35.64
2016-08-12|a|32.4|32.4
2016-08-11|a|29.45|29.45
2016-08-10|a|26.77|26.77
2016-08-09|a|24.34|24.34
2016-08-08|a|22.13|22.13
2016-08-05|a|20.12|20.12
2016-08-04|a|18.29|18.29
2016-08-03|a|16.63|16.63
2016-08-02|a|15.12|13.86
2016-09-02|b|66.03|64.82
2016-09-01|b|67.38|67.31
2016-08-31|b|74.8|67.33
2016-08-30|b|68|67.56
2016-08-29|b|68.98|67.29
2016-08-26|b|68.18|67.79
2016-08-25|b|70.77|68.68
2016-08-24|b|73.79|70.65
2016-08-23|b|75.12|69.37
2016-08-22|b|71.91|71.02
2016-08-19|b|71.78|71.2
2016-08-18|b|77.36|73.61
2016-08-17|b|78.12|73.06
2016-08-16|b|74.55|70.75
2016-08-15|b|67.77|65.75
2016-08-12|b|61.61|56.32
2016-08-09|b|56|53.16
2016-08-08|b|52.38|29.82
2016-08-05|b|47.62|46.09
2016-08-04|b|47.03|45.35
2016-08-03|b|44.78|41.37
2016-08-02|b|40.71|35.94
2016-08-01|b|37|34.57

想通过如下运算:取最大日期的第三列和所有日期中最小的第四列

得到:
a|91.56|13.86
b|66.03|29.82

请问如何实现呢?

论坛徽章:
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
2 [报告]
发表于 2016-11-06 19:33 |只看该作者

  1. awk 'BEGIN{FS=OFS="|"}{a[$2]=a[$2]?$1>a[$2]?$1:a[$2]:$1;b[$2]=b[$2]?$4<b[$2]?$4:b[$2]:$4;c[$2,$1]=$3}END{for(i in a)print i,c[i,a[i]],b[i]}' 1
复制代码

论坛徽章:
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
3 [报告]
发表于 2016-11-06 19:58 |只看该作者
  1. perl -F'\|' -nle '{push(@{$h{$F[1]}},[@F])}END{foreach(sort keys %h){($M)=sort{$b->[0] cmp $a->[0]}@{$h{$_}};($m)=sort{$a->[-1] cmp $b->[-1]}@{$h{$_}};print join("|",@{$M}[1,2],$m->[-1])}}' 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
4 [报告]
发表于 2016-11-06 20:24 |只看该作者
  1. #!/bin/perl
  2. use strict;
  3. use warnings;

  4. chomp (my @aData = split (/\|/, <>));
  5. while (<>){
  6.     chomp;
  7.     my @aList = split /\|/;
  8.     if ($aData[1] ne $aList[1]){
  9.         print join ("|", @aData[1, 2, -1]), "\n";
  10.         @aData = @aList;
  11.         next;
  12.     }
  13.     $aData[2] = $aList[2] if ($aList[0] gt $aData[0]);
  14.     $aData[-1] = $aList[-1] if ($aList[-1] < $aData[-1]);
  15. }

  16. print join ("|", @aData[1, 2, -1]), "\n";
复制代码

论坛徽章:
0
5 [报告]
发表于 2016-11-06 21:28 |只看该作者

论坛徽章:
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
6 [报告]
发表于 2016-11-06 21:33 |只看该作者
回复 5# alunfirst
  1. awk -F\| 'NR==FNR{a[$2]=a[$2]?$1>a[$2]?$1:a[$2]:$1;b[$2]=b[$2]?$4<b[$2]?$4:b[$2]:$4;next}$1==a[$2]{print $2,$3,b[$2]}' OFS=\| 1 1
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP