如果我不得不到文本文件,例如:比较两个文本文件相互
FILE1.TXT
apple
orange
pear
banana
FILE2.TXT
banana
pear
我怎么会采取一切短语对file2.txt远离file1.txt的行
因此,file1.txt将留在:
apple
orange
如果我不得不到文本文件,例如:比较两个文本文件相互
FILE1.TXT
apple
orange
pear
banana
FILE2.TXT
banana
pear
我怎么会采取一切短语对file2.txt远离file1.txt的行
因此,file1.txt将留在:
apple
orange
combine file1 not file2
关于Debian和衍生产品,可以在moreutils软件包中找到联合产品。
grep -v -F -f file2.txt file1.txt
-v表示只列出不匹配的模式FILE1.TXT的线条,和-f是指从文件采取的模式,在这种情况下 - FILE2.TXT。并且-F - 将PATTERN解释为由换行符分隔的固定字符串的列表,其中任何一个将被匹配。
grep命令内置在OS X和Linux上。在Windows上,你必须安装它;例如通过Cygwin。
如果文件很大(但也必须排序),comm
可能比由Ivan提出的更一般的grep解决方案更可取,因为它逐行操作,因此不需要加载file2.txt的整体到内存中(或者为每一行搜索它)。
comm -3 file1-sorted.txt file2-sorted.txt | sed 's/^\t//'
是需要的,命令sed
去除由comm
插入的领先标签。
这会将file2.txt中的条目解释为正则表达式。如果file2碰巧包含例如'。*',这不起作用。 – 2011-05-14 17:59:58
是的。谢谢。通过添加-F进行更正。 – 2011-05-14 18:06:23
仍然不是一种安全的方法。这将匹配子字符串。如果file2.txt中包含单词'a',则file1.txt中所有包含字符'a'的行将被抛出。 – rettops 2011-05-14 18:17:27