免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Perl 求代码
最近访问板块 发新帖
查看: 3144 | 回复: 7

求代码 [复制链接]

论坛徽章:
0
发表于 2014-10-11 12:01 |显示全部楼层
有这样的文件file1,我想按照 Num in cluster 下面的列中的数字最大的行提取出来
________________________________________________________________________________
     |           |     |           |     |
Clus | Lowest    | Run | Mean      | Num | Histogram
-ter | Binding   |     | Binding   | in  |
Rank | Energy    |     | Energy    | Clus|    5    10   15   20   25   30   35
_____|___________|_____|___________|_____|____:____|____:____|____:____|____:___
   1 |     -6.28 | 199 |     -6.28 |   1 |#
   2 |     -5.89 | 151 |     -5.07 |   8 |########
   3 |     -5.79 | 172 |     -5.60 |   2 |##
   4 |     -5.68 | 184 |     -4.89 |   7 |#######
   5 |     -5.29 | 185 |     -4.27 | 38 |######################################
   6 |     -5.29 |  94 |     -5.19 |   2 |##
   7 |     -5.25 | 189 |     -5.23 |   2 |##
   8 |     -5.21 | 121 |     -4.50 |  14 |##############
   9 |     -5.16 | 195 |     -5.16 |   1 |#
  10 |     -4.82 | 110 |     -4.32 |  11 |###########
  11 |     -4.80 |  87 |     -4.04 |  38 |######################################
  12 |     -4.76 |  75 |     -3.83 |   9 |#########
  13 |     -4.75 |  19 |     -3.93 |  27 |###########################
  14 |     -4.64 | 215 |     -4.64 |   1 |#
  15 |     -4.57 | 256 |     -4.57 |   1 |#


输出file2 :
5 |     -5.29 | 185 |     -4.27 | 38 |######################################
  11 |     -4.80 |  87 |     -4.04 |  38 |######################################

求代码:

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2014-10-11 13:05 |显示全部楼层
push @{$hash{$Num_in_cluster}},$_;
@a = sort { $b <=> $a } keys %hash;
print  join("\n",@{$hash{$a[0]}}).$/;

论坛徽章:
0
发表于 2014-10-11 14:41 |显示全部楼层
回复 2# huang6894


没明白,谢谢

论坛徽章:
0
发表于 2014-10-11 22:56 |显示全部楼层
本帖最后由 zwin506 于 2014-10-12 00:36 编辑

#!/usr/bin/perl
use DB_File;
unlink "./data.db";
$DB_BTREE->{'flags'}=R_DUP;
my $x=tie %fhash,'DB_File',"./data.db",O_RDWR|O_CREAT,0666,$DB_BTREE;
open FH,"<./file1";
while(my $line=<FH>){
        unless($line=~m/^[\n\r]/){ #
                $line=~s/\s+//g;
                chomp $line;
                my @t_arr=split/\|/,$line;
                $fhash{$t_arr[4]}=$line;
        }
}
my %uniq_num;#将索引值不重复的存储于散列key中
foreach my $key(keys %fhash){
        unless(exists $uniq_num{$key}){
                $uniq_num{$key}=1;
        }
}
foreach my $nkey(sort {$b<=>$a} keys %uniq_num){
        my @list=$x->get_dup($nkey);
        foreach (@list){
                print $_."\n";
        }
        last;
}
close FH;
运行结果:
5|-5.29|185|-4.27|38|######################################
11|-4.80|87|-4.04|38|######################################

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
发表于 2014-10-11 23:48 |显示全部楼层
  1. awk  '{if (maxnum<$9){delete arr;maxnum=$9;arr[NR]=$0}else if (maxnum==$9)arr[NR]=$0}END{for (i in arr)print arr[i]}'  15.txt
  2. 5 |     -5.29 | 185 |     -4.27 | 38 |######################################
  3. 11 |     -4.80 |  87 |     -4.04 |  38 |######################################
复制代码
用awk完成的,供参考。

论坛徽章:
0
发表于 2014-10-14 17:27 |显示全部楼层
回复 4# zwin506


    谢谢,已经解决了,谢谢

论坛徽章:
0
发表于 2014-10-14 17:28 |显示全部楼层
回复 5# wiliiwin


    谢谢,觉得很不错,虽然不懂awk

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
发表于 2014-10-29 13:27 |显示全部楼层
最近学习了下perl  用perl也做了下
  1. #!/usr/bin/perl
  2. open(FILE,"<1.txt");
  3. my %tem;
  4. while(my $file=<FILE>)
  5. {
  6.     if($file=~/\s*(\d+)\s*\|#/)
  7.     {
  8.         push @{$tem{$1}},$file;        
  9.     }
  10. }
  11. my @a=sort{$b<=>$a} keys %tem;
  12. printf  "@{$tem{$a[0]}}";
复制代码
  1. ./1.pl
  2.    5 |     -5.29 | 185 |     -4.27 | 38 |######################################
  3.    11 |     -4.80 |  87 |     -4.04 |  38 |######################################
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP