请帮我写一个合并csv文件行的代码。我的csv文件如下所示,
output.csv abc,1,2,3,4,5 abc,3,5,60,3 abc,4,5,6 def,2,5,6,7 def,3,4,5,6
这只是一个例子。我的csv文件数据每次都在不断变化。因此,它不限于abc(3行)或def(2行)。 请帮我把代码放到我的csv文件中,如下所示:
output.csv abc,1,2,3,4,5,3,5,60,3,4,5,6 def,2,5,6,7,3,4,5,6
我尝试使用Text :: CSV读取csv并尝试使用哈希。但是当我尝试将数组转换为哈希时,我陷入困境。我在这里有点困惑。请帮帮我。
答案 0 :(得分:4)
假设第一个字段不包含逗号:
perl -nle '
($key,$vals) = /^([^,]+),(.*)/;
push @{$final_lines{$key}},$vals;
END{
for $key (sort keys %final_lines){
print join ",",$key,@{$final_lines{$key}}
}
}
' < input_file > output_file
答案 1 :(得分:2)
#!/usr/bin/perl
use strict;
use warnings;
my %hash;
open my $ifh, '<', 'input.csv' or die $!;
open my $ofh, '>', 'output.csv' or die $!;
while (<$ifh>) {
chomp;
my @F = split /,/;
my $key = shift @F;
push @{$hash{$key}}, @F;
}
foreach (sort keys %hash) {
print $ofh "$_," . join (',', @{$hash{$_}}) . "\n";
}
close $ifh;
close $ofh;
答案 2 :(得分:1)
这是另一种选择:
use strict;
use warnings;
my %hash;
while (<>) {
$hash{$1} .= $2 if /(.+?)(,.+)/;
}
print "$_$hash{ $_ }\n" for sort keys %hash;
用法:perl script.pl inFile [>outFile]
最后一个可选参数将输出定向到文件。
数据集输出:
abc,1,2,3,4,5,3,5,60,3,4,5,6
def,2,5,6,7,3,4,5,6
希望这有帮助!