如何使用Perl在csv文件中合并多行
请帮助我写一个代码,将合并一个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 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 output.csv abc,1,2,3,4,5,3,5,60,3,4,5,6 def,2,5,6,7,3,4,5,6如何使用Perl在csv文件中合并多行,perl,csv,Perl,Csv,请帮助我写一个代码,将合并一个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 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文件显示
我尝试使用Text::csv读取csv并尝试哈希。但当我试图将数组转换为散列时,我遇到了麻烦。我有点困惑。请帮我解决。假设第一个字段不包含逗号:
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
perl-nle'
($key,$vals)=/^([^,]+),(.*)/;
推送{$final_line{$key},$vals;
结束{
对于$key(排序关键字%最终行){
打印联接“,”,$key,@{$final_行{$key}
}
}
“output\u file”
假设第一个字段不包含逗号:
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
perl-nle'
($key,$vals)=/^([^,]+),(.*)/;
推送{$final_line{$key},$vals;
结束{
对于$key(排序关键字%最终行){
打印联接“,”,$key,@{$final_行{$key}
}
}
“output\u file”
#/usr/bin/perl
严格使用;
使用警告;
我的%hash;
打开我的$ifh、、'output.csv'或die$!;
而(){
咀嚼;
我的@F=split/,/;
我的$key=shift@F;
push@{$hash{$key}},@F;
}
foreach(排序键%hash){
打印$ofh“$”.join(“,”,@{$hash{$})。“\n”;
}
关闭$ifh;
关闭$ofh;
#/usr/bin/perl
严格使用;
使用警告;
我的%hash;
打开我的$ifh、、'output.csv'或die$!;
而(){
咀嚼;
我的@F=split/,/;
我的$key=shift@F;
push@{$hash{$key}},@F;
}
foreach(排序键%hash){
打印$ofh“$”.join(“,”,@{$hash{$})。“\n”;
}
关闭$ifh;
关闭$ofh;
这里是另一个选项:
use strict;
use warnings;
my %hash;
while (<>) {
$hash{$1} .= $2 if /(.+?)(,.+)/;
}
print "$_$hash{ $_ }\n" for sort keys %hash;
希望这有帮助 还有一个选择:
use strict;
use warnings;
my %hash;
while (<>) {
$hash{$1} .= $2 if /(.+?)(,.+)/;
}
print "$_$hash{ $_ }\n" for sort keys %hash;
希望这有帮助 我们想看看你的代码我们想看看你的代码