免费注册 查看新帖 |

Chinaunix

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

求助:每行最大值及其列号 [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-10-08 06:20:00
发表于 2016-06-06 15:28 |显示全部楼层
本帖最后由 56836430 于 2016-06-06 15:31 编辑

有一个数据如:In.txt(第一行为每列标题)
N a b c d e f g h i j
N1 1 2 3 5 6 5 7 5 3 1
N2 1 5 3 4 2 7 5 4 5 6
N3 6 3 1 3 5 9 4 3 2 1
...

想得到每行最大值及其所在的列号
结果如下(out.txt):

N a b c d e f g h i j  M ID
N1 1 2 3 5 6 5 7 5 3 1 7 h
N2 1 5 3 4 2 7 5 4 5 6 7 g
N3 6 3 1 3 5 9 4 3 2 1 9 g
......

有没有简便的法子?

求助!!

论坛徽章:
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-06-06 15:53 |显示全部楼层
回复 1# 56836430
请问, out.txt 文件的 N a b c d e f g h i j  M ID 怎么来的 能说下吗?

   

论坛徽章:
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-06-06 16:41 |显示全部楼层
回复 1# 56836430

$ perl -lane '{if($.==1){@P=@F;print "$_ M ID";next}$M=0;for(1..@F){if($M<$F[$_]){$M=$F[$_];$ID=$P[$_]}}print "@F $M $ID"}' In.txt > Out.txt

$ cat Out.txt
N a b c d e f g h i j M ID
N1 1 2 3 5 6 5 7 5 3 1 7 g
N2 1 5 3 4 2 7 5 4 5 6 7 f
N3 6 3 1 3 5 9 4 3 2 1 9 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-06-06 17:01 |显示全部楼层
本帖最后由 sunzhiguolu 于 2016-06-06 17:13 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my @aTitle = split ' ', scalar <DATA>;
  5. print "@aTitle M ID\n";

  6. while (<DATA>){
  7.     my ($max, $offset, @aData) = (-1, 0, split);
  8.     foreach (1 .. $#aData){
  9.         ($max, $offset) = ($aData[$_], $_) if ($max < $aData[$_]);
  10.     }
  11.     print "@aData $max $aTitle[$offset]\n";
  12. }

  13. __DATA__
  14. N a b c d e f g h i j
  15. N1 1 2 3 5 6 5 7 5 3 1 7
  16. N2 1 5 3 4 2 7 5 4 5 6 7
  17. N3 6 3 1 3 5 9 4 3 2 1 9
复制代码
N a b c d e f g h i j M ID
N1 1 2 3 5 6 5 7 5 3 1 7 7 g
N2 1 5 3 4 2 7 5 4 5 6 7 7 f
N3 6 3 1 3 5 9 4 3 2 1 9 9 f



   

论坛徽章:
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-06-06 17:03 |显示全部楼层
回复 4# sunzhiguolu

程序是
依照写出来(的code),跑出结果
不是依照你想出来的,得到结果
   

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 谢谢您的指点!!!

查看全部评分

论坛徽章:
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-06-06 17:12 |显示全部楼层
回复 5# jason680
我让楼主的给出的结果拐跑了, 哈哈, 谢谢大神指点...

   

论坛徽章:
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-06-06 17:39 |显示全部楼层
再来一个,
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my @aTitle = split ' ', scalar <DATA>;
  5. print "@aTitle M ID\n";

  6. while (<DATA>){
  7.     my @aData = split;
  8.     my ($offset) = sort {$aData[$b] <=> $aData[$a]} 1 .. $#aData;
  9.     print "@aData $aData[$offset] $aTitle[$offset]\n";
  10. }

  11. __DATA__
  12. N a b c d e f g h i j
  13. N1 1 2 3 5 6 5 7 5 3 1 7
  14. N2 1 5 3 4 2 7 5 4 5 6 7
  15. N3 6 3 1 3 5 9 4 3 2 1 9
复制代码

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-06-06 20:56 |显示全部楼层
$> cat aa |perl -alne'if (/a b c/) {print $_," M ID"} else { my $C="a";shift @F; print $_," ", (sort map{$_." ".$C++}@F)[-1];}

N a b c d e f g h i j M ID
N1 1 2 3 5 6 5 7 5 3 1 7 g
N2 1 5 3 4 2 7 5 4 5 6 7 f
N3 6 3 1 3 5 9 4 3 2 1 9 f

如果标题是a b c ... 有序的就不必存了。

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-06-06 21:03 |显示全部楼层
#using perl -p:


$> cat aa |perl -alpne'if (/a b c/) {$_.=" M ID"} else { my $C="a";shift @F; $_.=" ".(sort map{$_." ".$C++}@F)[-1];}'

N a b c d e f g h i j M ID
N1 1 2 3 5 6 5 7 5 3 1 7 g
N2 1 5 3 4 2 7 5 4 5 6 7 f
N3 6 3 1 3 5 9 4 3 2 1 9 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-06-06 21:14 |显示全部楼层
回复 9# RE_HASH
大神招式升级了, 学习了.

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP