0

我有一堆简单格式的 csv 文件,比如“姓名、国家、货币”。我需要阅读所有这些并只打印唯一的联合。如果它们出现在几个文件中,它们是相同的。尝试使用 Hash::Merge 但似乎只适用于两个。我假设我必须在打开这些文件进行阅读时在循环中重新初始化它,但不确定如何。最后,我想要一个性质相同但包含所有文件而不重复的文件。非常感谢。

输入看起来像:

EDL,Finland,Euro

输出需要相同的格式。我循环读取文件,并且在任何阶段我都有两个哈希 %A 和 %B ,其中 $name 作为键(拆分后)。

$A{$name}=$coun and $B{$name}=$curr 

我也有两个 %merged 哈希定义为

$merged1 = Hash::Merge->new('LEFT_PRECEDENT'); 
my %merged1 = %{ $merged1->merge( \%merged1, \%A ) }; 

我得到的错误是抱怨未知功能“合并”。一定是简单的东西,但看不到。

4

2 回答 2

1

假设被认为重复的行在所有字段中都是相同的,并且数据是统一的,你可以用简单的东西来逃避

perl -ne'print unless $seen{$_}++' universe* > out.csv 

这是一个简单的重复数据删除例程(通过哈希键进行重复数据删除),然后使用 shell 重定向输出。

于 2020-11-22T11:38:41.797 回答
0

看来您并不真的需要 Perl 来描述您所描述的内容。这应该在任何 Mac 或 Linux 上执行:

sort -u universe*

-u选项删除重复项

于 2020-11-22T11:53:41.867 回答