2011-05-14 172 views
1

如果我不得不到文本文件,例如:比较两个文本文件相互

FILE1.TXT

apple 
orange 
pear 
banana 

FILE2.TXT

banana 
pear 

我怎么会采取一切短语对file2.txt远离file1.txt的行

因此,file1.txt将留在:

apple 
orange 

回答

0
combine file1 not file2 

关于Debian和衍生产品,可以在moreutils软件包中找到联合产品。

1
grep -v -F -f file2.txt file1.txt 

-v表示只列出不匹配的模式FILE1.TXT的线条,和-f是指从文件采取的模式,在这种情况下 - FILE2.TXT。并且-F - 将PATTERN解释为由换行符分隔的固定字符串的列表,其中任何一个将被匹配。

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

+0

这会将file2.txt中的条目解释为正则表达式。如果file2碰巧包含例如'。*',这不起作用。 – 2011-05-14 17:59:58

+0

是的。谢谢。通过添加-F进行更正。 – 2011-05-14 18:06:23

+0

仍然不是一种安全的方法。这将匹配子字符串。如果file2.txt中包含单词'a',则file1.txt中所有包含字符'a'的行将被抛出。 – rettops 2011-05-14 18:17:27

1

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

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

是需要的,命令sed去除由comm插入的领先标签。