gpt4 book ai didi

linux - 如何根据第一个字段合并csv文件中的记录?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:51 25 4
gpt4 key购买 nike

我有一个 csv 文件,

 id1,v1,v2,v3,v4
id2,v1,v2,v6,v4
id1,v7,v8,v3,v9
id1,v10,v11,v12,v13
id2,v3,v5,v8,v7

因为文件没有排序,而且不应该排序!我希望输出为:

 id1,v1|v7|v10,v2|v8|v11,v3|v12,v4|v9|v13
id2,v1|v10,v2|v5,v6|v8,v4|v7

其中,列中的所有相应值都合并到具有相同 id 的记录中的相应列,除了重复值(请参阅第 3 列中的 v3 的 id1)和 id。

我使用此处给出的代码进行了尝试 http://www.robelle.com/tips/st-export-notes.html .但它需要的远不止于此。

如何使用 perl 实现这一点?我是 perl 的新手。提前致谢!

最佳答案

假设您不需要任何特定的排序顺序,您可以使用数组散列来解决这个问题。哈希在其他语言中被称为字典。

use strict;
use warnings;

my %data;

while ( <DATA> ) {
my ($id, @vals) = /[^,\s]+/g;
for my $i ( 0 .. $#vals ) {
++$data{$id}[$i]{$vals[$i]};
}
}

while ( my ($id, $vals) = each %data ) {
my @vals = map { join '|', keys %$_ } @$vals;
printf "%s,%s\n", $id, join ',', @vals;
}

__DATA__
id1,v1,v2,v3,v4
id2,v1,v2,v6,v4
id1,v7,v8,v3,v9
id1,v10,v11,v12,v13
id2,v3,v5,v8,v7

输出

id2,v1|v3,v5|v2,v8|v6,v7|v4
id1,v7|v10|v1,v11|v2|v8,v12|v3,v4|v13|v9

关于linux - 如何根据第一个字段合并csv文件中的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29167290/

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