【问题标题】:Perl script to compare two files but print in orderPerl脚本比较两个文件但按顺序打印
【发布时间】:2013-07-11 15:45:57
【问题描述】:

我关注了这个问题perl compare two file and print the matching lines 并找到了使用哈希在两个文件之间匹配或不匹配的行。

但我发现哈希重新排列了行,我希望这些行按顺序排列。我可以编写多个 for 循环以按顺序获取结果,但这不如哈希有效。有没有人遇到过这个问题,可以请帮助他们的解决方案

【问题讨论】:

    标签: perl hash


    【解决方案1】:

    也许没有完全理解这个问题,但是

    fgrep -xf file2 file1
    

    还不够吗?

    fgrep -xf file1 file2
    

    是的,不是perl,而是简单快速...

    【讨论】:

    • 这很简短。同意这应该可以在没有中间 perl 的情况下解决整个问题。但存在部分匹配的风险。如果您添加 -x 标志,您只会匹配整行,我认为这是 OP 想要的。将速度与他的两步方法进行比较会很有趣。
    • @Floris 添加了-x。谢谢你:)
    【解决方案2】:

    这可以通过两个步骤有效地完成。假设您已经能够找到“匹配的行”,但它们的顺序错误;然后一个简单的grep 可以重新组织它们。假设您有一个脚本matchThem,它接受两个输入(file1file2)并将它们输出到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
    

    【讨论】:

    • 我无法让它与“grep -Fx tempFile file1”一起工作,但“fgrep -f tempFile file1”可以工作..谢谢@Floris
    • 我有一个短文件要比较,所以我没有太大区别,只有 grep 按顺序给出输出(我需要).. 但我在网上发现 perl 哈希表对于大文件的扩展性更好日志文件 ..stackoverflow.com/questions/11490036/fast-alternative-to-grep-f
    • 有趣的链接 - 如果你曾经在大文件上运行过这个,你会更新我们的时差吗?
    【解决方案3】:

    如果你想要一个保持插入顺序的哈希,那么试试 CPAN 模块Tie::IxHash

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2015-07-08
      • 2014-07-06
      • 2012-05-29
      • 2020-08-01
      相关资源
      最近更新 更多