【发布时间】: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
如果我必须输入文本文件,例如:
file1.txt
apple
orange
pear
banana
file2.txt
banana
pear
如何将 file2.txt 行中的所有短语从 file1.txt 中取出
所以 file1.txt 会留下:
apple
orange
【问题讨论】:
标签: linux windows command-line
如果文件很大(但也必须排序),comm 可能比 Ivan 提出的更通用的 grep 解决方案更可取,因为它逐行操作,因此不需要加载整个 file2。 txt 到内存中(或搜索每一行)。
comm -3 file1-sorted.txt file2-sorted.txt | sed 's/^\t//'
需要sed 命令来删除comm 插入的前导制表符。
【讨论】:
grep -v -F -f file2.txt file1.txt
-v 表示仅列出 file1.txt 中与模式不匹配的行,-f 表示从文件中获取模式,在本例中为 file2.txt。和 -F - 将 PATTERN 解释为固定字符串列表,由换行符分隔,其中任何一个都将被匹配。
grep 命令内置在 OS X 和 Linux 上。在 Windows 上,您必须安装它;例如通过Cygwin。
【讨论】:
.*,这个不行。
combine file1 not file2
在 Debian 及其衍生版本中,combine 可以在 moreutils 包中找到。
【讨论】: