【发布时间】:2013-07-11 15:45:57
【问题描述】:
我关注了这个问题perl compare two file and print the matching lines 并找到了使用哈希在两个文件之间匹配或不匹配的行。
但我发现哈希重新排列了行,我希望这些行按顺序排列。我可以编写多个 for 循环以按顺序获取结果,但这不如哈希有效。有没有人遇到过这个问题,可以请帮助他们的解决方案
【问题讨论】:
我关注了这个问题perl compare two file and print the matching lines 并找到了使用哈希在两个文件之间匹配或不匹配的行。
但我发现哈希重新排列了行,我希望这些行按顺序排列。我可以编写多个 for 循环以按顺序获取结果,但这不如哈希有效。有没有人遇到过这个问题,可以请帮助他们的解决方案
【问题讨论】:
也许没有完全理解这个问题,但是
fgrep -xf file2 file1
还不够吗?
或
fgrep -xf file1 file2
是的,不是perl,而是简单快速...
【讨论】:
-x 标志,您只会匹配整行,我认为这是 OP 想要的。将速度与他的两步方法进行比较会很有趣。
-x。谢谢你:)
这可以通过两个步骤有效地完成。假设您已经能够找到“匹配的行”,但它们的顺序错误;然后一个简单的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
【讨论】:
如果你想要一个保持插入顺序的哈希,那么试试 CPAN 模块Tie::IxHash。
【讨论】: