2012-07-29 44 views
0

嗨,我有這樣的事情在一個文件加入2行基於第一場

12345 aaaaaaaaaabbbbbbbbbb 
23456 bbcbcbbgyhuhuhhhhhhh 
12345 7ijkunmmnniiiiiiii 
23456 bbcbcbbgyhuhsdrfrrhhhv 

我想行合併成基於第一

場I,E一行,

12345 aaaaaaaaaabbbbbbbbbb 12345 7ijkunmmnniiiiiiii 
23456 bbcbcbbgyhuhuhhhhhhv 23456 bbcbcbbgyhuhsdrfrrhh 

任何一個可以讓我知道該怎麼做?

+0

sed'N; s/\ n//'正在加入線條,但我無法得到如何指定我的狀態 – user1536457 2012-07-29 07:02:16

回答

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; 
+0

嗨,它的打印只是我的文件的第3和4rth行它沒有合併具有共同第一個字段的行 – user1536457 2012-07-29 07:51:33

+0

對不起,我在正則表達式中犯了錯誤,我已經修復了它。再試一次:) – 2012-07-29 08:18:04

+0

嗨,非常感謝你的工作,我希望結果是逐行打印 – user1536457 2012-07-29 08:39:09

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 
+0

我很抱歉地說,這些都沒有工作。 – user1536457 2012-07-29 07:50:13

1

一種awk替代:

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

串接到具有$1作爲鍵關聯數組的每一行。