0

嗨,我在一个文件中有这样的东西

12345   aaaaaaaaaabbbbbbbbbb 
23456   bbcbcbbgyhuhuhhhhhhh 
12345   7ijkunmmnniiiiiiii
23456   bbcbcbbgyhuhsdrfrrhhhv

我想根据第一个将行合并为一行

领域,即,

12345   aaaaaaaaaabbbbbbbbbb 12345   7ijkunmmnniiiiiiii
23456 bbcbcbbgyhuhuhhhhhhv 23456   bbcbcbbgyhuhsdrfrrhh

谁能让我知道该怎么做?

4

3 回答 3

1
use strict;

open my $fh, '<your_file'
   or die "cant open file $!";

my %result; # result hash

# read file line by line
while (my $line = <$fh>) {
    chomp $line;

    # check format
    if ( $line =~ m/^(\d+)\s+(.*?)$/x ) {

        # add value to anonymous array in hash
        $result{$1} = [] unless exists $result{$1};
        push @{$result{$1}}, $2;
    }
}

# print result
while (my ($key, $values) = each %result) {

   printf "%s ", $key;
   for my $value (@$values) {

       printf "%s,", $value;
   }
}

close $fh;
于 2012-07-29T07:06:19.817 回答
1
while (<DATA>) {
    ($x, $y) = split;
    push @{$lines{$x}}, $y;
}

while (($x, $y) = each %lines) {
    print "$x\t$_\t" for @{$y};
    print "\n";
}

__DATA__
12345   aaaaaaaaaabbbbbbbbbb 
23456   bbcbcbbgyhuhuhhhhhhh 
12345   7ijkunmmnniiiiiiii
23456   bbcbcbbgyhuhsdrfrrhhhv
于 2012-07-29T07:06:54.283 回答
1

另一种awk选择:

awk '
  { A[$1] = A[$1] $0 " " } 
  END { for (k in A) print A[k] }' infile

将每一行连接到一个关联数组,$1作为键。

于 2012-07-29T08:47:08.223 回答