perl - 如何使用 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 ) };
我得到的错误是抱怨未知功能“合并”。一定是简单的东西,但看不到。
解决方案
假设被认为重复的行在所有字段中都是相同的,并且数据是统一的,你可以用简单的东西来逃避
perl -ne'print unless $seen{$_}++' universe* > out.csv
这是一个简单的重复数据删除例程(通过哈希键进行重复数据删除),然后使用 shell 重定向输出。
推荐阅读
- java - 如何为我的自定义可运行方法使用 java lambda 表达式
- node.js - 在 React 和 Node 之间执行客户端请求,都在单独的 Docker 容器中
- django - 你怎么知道要测试什么状态码?
- openstreetmap - 如何将 OSM 与 optaplanner 工作台集成
- flutter - 如何将 StatefulWidget 类添加到 BottomNavigationBar
- spring - Spring Security 的默认用户模式和初始化脚本?
- image - 在knitr中插入外部图像
- string - Strings that appear same are reflected as unequal in lua
- java - 如何添加 JVM 选项?
- swift - Swift 5 iOS12 - 推送通知不起作用