【问题标题】:How to parse multiple csv files with Perl and print only the unique results如何使用 Perl 解析多个 csv 文件并仅打印唯一的结果
【发布时间】:2020-11-22 10:29:56
【问题描述】:

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

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

【问题讨论】:

  • 这个对话是archived chat,因为已经发布了一个答案。

标签: perl merge perl-hash


【解决方案1】:

假设被视为重复的行在所有字段中都是相同的,并且数据是统一的,您可以使用类似的简单方法来逃避

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

这是一个简单的去重例程(通过哈希键去重),然后用 shell 重定向输出。

【讨论】:

    【解决方案2】:

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

    sort -u universe*
    

    -u 选项删除重复项

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 2020-09-18
      • 2022-07-12
      • 1970-01-01
      • 2015-10-14
      • 2022-12-11
      • 2021-02-28
      相关资源
      最近更新 更多