gpt4 book ai didi

linux - 合并 CSV 文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:16 30 4
gpt4 key购买 nike

合并两个 csv 文件并将结果附加到 perl 中的同一行的最佳方法是什么?

例如,一个 CSV 文件看起来像

1234,user1,server
4323,user2,server
532,user3,server

第二个看起来像

user1,owner
user2,owner
user3,owner1

我想要的结果是

1234,user1,server,owner
4323,user2,server,owner
532,user3,server,owner1

用户不按顺序排列,因此我需要搜索存储在数组中的第一个 csv 文件以查看哪些用户匹配,然后将所有者应用到行尾。

到目前为止,我已经将两个文件读入数组,然后我迷路了

我会发布代码,但它是更大脚本的一部分

最佳答案

这听起来最适合哈希。首先将一个文件读入哈希,然后添加另一个。可能会为存在于一个文件中但不存在于另一个文件中的值添加警告。

类似于:

use warnings;
use strict;
use Text::CSV;
use autodie;

my %data;
my $file1 = "user.csv";
my $file2 = "user2.csv";

my $csv = Text::CSV->new ( { binary => 1 } );

open my $fh, '<', $file1;
while (my $row = $csv->getline($fh)) {
my ($num, $user, $server) = @$row;
$data{$user} = { 'num' => $num, 'server' => $server };
}

open $fh, '<', $file2;
while (my $row = $csv->getline($fh)) {
my ($user, $owner) = @$row;
if (not defined $data{$user}) {
# warning? something else appropriate
} else {
$data{$user}{'owner'} = $owner;
}
}

for my $user (keys %data) {
print join(',', $data{$user}{'num'}, $user, $data{$user}{'server'},
$data{$user}{'owner'}), "\n";
}

编辑:根据评论和其他答案中的建议,我将提取数据的方法更改为使用 Text::CSV而不是 split。我不太熟悉该模块,但它似乎在我的测试中起作用。

关于linux - 合并 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6699466/

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