首页 > 解决方案 > 如何使用 Perl 解析多个 csv 文件并仅打印唯一的结果

问题描述

我有一堆简单格式的 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 ) }; 

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

标签: perlmergeperl-hash

解决方案


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

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

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


推荐阅读