如何用 Perl 解析多个 csv 文件并只打印唯一的结果

How to parse multiple csv files with Perl and print only the unique results

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

输入看起来像:

EDL,Finland,Euro

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

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

我还有两个 %merged hashes 定义为

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

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

假设被认为是重复的行在所有字段中都是相同的,并且数据是统一的,您可以使用像

这样简单的方法
perl -ne'print unless $seen{$_}++' universe* > out.csv 

这是一个简单的重复数据删除例程(通过哈希键重复数据删除),然后使用 shell.

重定向输出

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

sort -u universe*

-u 选项删除重复项