【问题标题】:Comparing two text files with each other比较两个文本文件
【发布时间】:2011-08-25 14:37:28
【问题描述】:

如果我必须输入文本文件,例如:

file1.txt

apple
orange
pear
banana

file2.txt

banana
pear

如何将 file2.txt 行中的所有短语从 file1.txt 中取出

所以 file1.txt 会留下:

apple
orange

【问题讨论】:

    标签: linux windows command-line


    【解决方案1】:

    如果文件很大(但也必须排序),comm 可能比 Ivan 提出的更通用的 grep 解决方案更可取,因为它逐行操作,因此不需要加载整个 file2。 txt 到内存中(或搜索每一行)。

    comm -3 file1-sorted.txt file2-sorted.txt | sed 's/^\t//'
    

    需要sed 命令来删除comm 插入的前导制表符。

    【讨论】:

      【解决方案2】:
      grep -v -F -f file2.txt file1.txt
      

      -v 表示仅列出 file1.txt 中与模式不匹配的行,-f 表示从文件中获取模式,在本例中为 file2.txt。和 -F - 将 PATTERN 解释为固定字符串列表,由换行符分隔,其中任何一个都将被匹配。

      grep 命令内置在 OS X 和 Linux 上。在 Windows 上,您必须安装它;例如通过Cygwin

      【讨论】:

      • 这会将 file2.txt 中的条目解释为正则表达式。如果 file2 恰好包含例如.*,这个不行。
      • 是的。谢谢。通过添加 -F 更正。
      • 仍然不是安全的方法。这将匹配子字符串。如果 file2.txt 中包含单词“a”,则 file1.txt 中包含字符“a”的所有行都将被丢弃。
      • 问题是:“我如何将 file2.txt 行中的所有短语从 file1.txt 中取出”。子字符串匹配就好了。
      【解决方案3】:
      combine file1 not file2
      

      在 Debian 及其衍生版本中,combine 可以在 moreutils 包中找到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多