如何使用Perl将文件中第一行出现在%hash中?

时间:2014-06-22 18:24:07

标签: regex perl parsing

例如,鉴于此数据:

ID1 2 3 4 
ID1 2 4 5 
ID2 2 6 8
ID2 4 6 7 
ID3 3 5 6 

我想读取一个文件句柄并在第一行循环,直到ID与之前的ID不匹配,然后继续直到文件结尾,所以我的输出文件看起来像:

ID1 2 3 4 
ID2 2 6 8 
ID3 3 5 6

非常感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:4)

perl -ane '$s{$F[0]}++ or print' file 

答案 1 :(得分:2)

use warnings;
use strict;
use Data::Dumper;

open my $in, '<', 'in.txt';

my %data;
while (<$in>){
    chomp;
    my @split = split(/\s+/);
    next if exists $data{$split[0]};
    $data{$split[0]} = [$split[1], $split[2], $split[3] ];
}

print Dumper \%data;

答案 2 :(得分:0)

或者,就像@ mpapec的解决方案一样,但是作为匿名哈希(%_):

perl -ane '${$F[0]}++ or print' file.txt

那时我真的只是做傻傻的代码高尔夫球......