我已经按照这个问题perl 比较两个文件并打印匹配的行,并使用哈希找到两个文件之间匹配或不匹配的行。
但是我发现散列重新排列了行,我希望这些行按顺序排列。我可以编写多个 for 循环来按顺序获取结果,但这不如哈希有效。有没有人遇到过这个问题,可以请帮助他们的解决方案
我已经按照这个问题perl 比较两个文件并打印匹配的行,并使用哈希找到两个文件之间匹配或不匹配的行。
但是我发现散列重新排列了行,我希望这些行按顺序排列。我可以编写多个 for 循环来按顺序获取结果,但这不如哈希有效。有没有人遇到过这个问题,可以请帮助他们的解决方案
也许不完全理解这个问题,但是
fgrep -xf file2 file1
是不足够的?
或者
fgrep -xf file1 file2
是的,不是perl
但是,简单快速......
如果你想要一个保持插入顺序的哈希,那么试试 CPAN 模块Tie::IxHash。
这可以通过两个步骤有效地完成。假设您已经能够找到“匹配的行”,但它们的顺序错误;然后一个简单的grep
可以重新组织它们。假设您有一个脚本matchThem
,它接受两个输入 (file1
和file2
) 并将它们输出到tempFile
,那么整个脚本将是:
matchThem file1 file2 > tempFile
grep -Fx -f tempFile file1
-Fx
国旗的意思:
-F : find exact match only (much faster than wildcards)
-x : only match whole lines