忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 7568 | 回复: 11

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

论坛徽章:
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 怎么来的 能说下吗?

   

论坛徽章:
120
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期: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
发表于 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



   

论坛徽章:
120
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期: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
发表于 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
复制代码

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2016-03-09 16:04:2615-16赛季CBA联赛之佛山
日期:2016-03-16 20:23:14
发表于 2016-06-06 19:26 |显示全部楼层
本帖最后由 时时20160307 于 2016-06-06 19:27 编辑
  1. perl -MList::Util=max -lane '$.==1?do{@a=@F[2..$#F];print "@F M ID"}:map{if($F[$_] == max @F[1..$#F]){print "@F ",max(@F[1..$#F])," $a[$_-1]"}}1..$#F' file
  2. N a b c d e f g h i j M ID
  3. N1 1 2 3 5 6 5 7 5 3 1 7 h
  4. N2 1 5 3 4 2 7 5 4 5 6 7 g
  5. N3 6 3 1 3 5 9 4 3 2 1 9 g
复制代码
回复 1# 56836430


   

论坛徽章:
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP