首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用perl对文件中的唯一高值进行排序

使用perl对文件中的唯一高值进行排序
EN

Stack Overflow用户
提问于 2012-10-24 09:21:41
回答 1查看 159关注 0票数 0

我有一个包含以下行的数据文件:

代码语言:javascript
运行
复制
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b171_b174_b236_b242_qreg/d2    19.33    18.65    -0.67 (VIOLATED)
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b186_b196_b210_b223_qreg/d2    15.09    11.70    -3.39 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b103_b104/d2    40.35    36.61    -3.74 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b105_b106/d1    11.06     8.77    -2.29 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b105_b106/d1    40.08    29.18   -10.90 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b119_b120/d2    11.37     8.34    -3.03 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b11_b12/d2    14.56     4.41   -10.15 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b11_b12/d2    45.82    27.47   -18.34 (VIOLATED)

我需要得到第四列和相应的第一列的唯一值和最小值。

输出应为:

代码语言:javascript
运行
复制
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b171_b174_b236_b242_qreg/d2    19.33    18.65    -0.67 (VIOLATED)
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b186_b196_b210_b223_qreg/d2    15.09    11.70    -3.39 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b103_b104/d2    40.35    36.61    -3.74 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b105_b106/d1    40.08    29.18   -10.90 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b119_b120/d2    11.37     8.34    -3.03 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b11_b12/d2    45.82    27.47   -18.34 (VIOLATED)

我尝试使用模式匹配来获取散列中的列1和列4,然后对散列进行排序。但这不是我想要的工作方式。请帮帮忙。

代码语言:javascript
运行
复制
while(<FILE1>) {
    my $path = $_;
    $path =~ /([^\s]+)/;
    $path = $1; #Extracting path
    chop($path);
    my $slack = $_;
    #$slack =~ /([^\s+]+)[\d+][\s+][\d+][\s+]([^\f+]+)[\s](VIOLATED)/;
    $slack =~ /[^\f+][\s+][\f+][\s+][\f+][\s+]([\f+]+)[\s](VIOLATED)/;
    $slack = $1;
    print "$slack\n";
    chop($slack);
    print FILE2 "$slack\n";
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 16:55:53

我会这样做(如果文件名中不包含空格):

代码语言:javascript
运行
复制
my %res;
while(<DATA>) {
    chomp;
    my @vals = split/\s+/;
    $res{$vals[0]} = {} unless exists $res{$vals[0]};
    if (!exists($res{$vals[0]}{value}) || $vals[3] < $res{$vals[0]}{value}) {
        $res{$vals[0]}{value} = $vals[3];
        $res{$vals[0]}{line} = $_;
    }
}
say $res{$_}{line} for keys %res;

__DATA__
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b171_b174_b236_b242_qreg/d2    19.33    18.65    -0.67 (VIOLATED)
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b186_b196_b210_b223_qreg/d2    15.09    11.70    -3.39 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b103_b104/d2    40.35    36.61    -3.74 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b105_b106/d1    11.06     8.77    -2.29 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b105_b106/d1    40.08    29.18   -10.90 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b119_b120/d2    11.37     8.34    -3.03 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b11_b12/d2    14.56     4.41   -10.15 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b11_b12/d2    45.82    27.47   -18.34 (VIOLATED)

输出:

代码语言:javascript
运行
复制
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b186_b196_b210_b223_qreg/d2    15.09    11.70    -3.39 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b105_b106/d1    40.08    29.18   -10.90 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b103_b104/d2    40.35    36.61    -3.74 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b119_b120/d2    11.37     8.34    -3.03 (VIOLATED)
gtssmpar11/dmunit1/mt_dm_fifo_csr_flopped_out/u_gt_ram/wrdataR_reg_0_b171_b174_b236_b242_qreg/d2    19.33    18.65    -0.67 (VIOLATED)
gtssmpar21/flunit1/flunitx1/fl_flex1/fl_mt_input_fifo/u_gt_ram/wrdataR_dreg_b11_b12/d2    45.82    27.47   -18.34 (VIOLATED)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13041718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档