gpt4 book ai didi

perl - Powershell/Perl : Merging multiple CSV files into one?

转载 作者:行者123 更新时间:2023-12-04 13:54:41 25 4
gpt4 key购买 nike

我有以下 CSV 文件,我想将它们合并成一个 CSV

01.csv

apples,48,12,7
pear,17,16,2
orange,22,6,1

02.csv
apples,51,8,6
grape,87,42,12
pear,22,3,7

03.csv
apples,11,12,13
grape,81,5,8
pear,11,5,6

04.csv
apples,14,12,8
orange,5,7,9

期望的输出:
apples,48,12,7,51,8,6,11,12,13,14,12,8
grape,,,87,42,12,81,5,8,,,
pear,17,16,2,22,3,7,11,5,6,,,
orange,22,6,1,,,,,,5,7,9

任何人都可以提供有关如何实现这一目标的指导吗?最好使用 Powershell,但如果这样更容易,可以使用 Perl 等替代方案。

感谢 Pantik,您的代码输出接近我想要的:
apples,48,12,7,51,8,6,11,12,13,14,12,8
grape,87,42,12,81,5,8
orange,22,6,1,5,7,9
pear,17,16,2,22,3,7,11,5,6

不幸的是,当 CSV 文件中不存在该条目时,我需要使用“占位符”逗号,例如橙色,22,6,1,,,,,,5,7,9 而不是橙色,22,6,1,5,7,9

更新:我希望这些按文件名的顺序解析,例如:
$myFiles = @(gci *.csv) | sort Name
foreach ($file in $myFiles){

问候
泰德

最佳答案

这是我的 Perl 版本:

use strict;
use warnings;

my $filenum = 0;

my ( %fruits, %data );
foreach my $file ( sort glob("*.csv") ) {

$filenum++;
open my $fh, "<", $file or die $!;

while ( my $line = <$fh> ) {

chomp $line;

my ( $fruit, @values ) = split /,/, $line;

$fruits{$fruit} = 1;

$data{$filenum}{$fruit} = \@values;
}

close $fh;
}
foreach my $fruit ( sort keys %fruits ) {

print $fruit, ",", join( ",", map { $data{$_}{$fruit} ? @{ $data{$_}{$fruit} } : ",," } 1 .. $filenum ), "\n";
}

这给了我:
apples,48,12,7,51,8,6,11,12,13,14,12,8
grape,,,,87,42,12,81,5,8,,,
orange,22,6,1,,,,,,,5,7,9
pear,17,16,2,22,3,7,11,5,6,,,

也是如此 你有一个错字葡萄或 我误解了一些东西 ?

关于perl - Powershell/Perl : Merging multiple CSV files into one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com