从一个文件打印未包含在另一个文件中的行

时间:2011-04-28 01:57:03

标签: perl bash

我希望打印一个文件中但不在另一个文件中的行。但是,这两个文件都没有排序,我需要在两个文件中保留原始顺序。

 contents of file1:
 string2
 string1
 string3

 contents of file2:
 string3
 string1

 Output:
 string2

是否有一个简单的脚本可以完成此任务?

4 个答案:

答案 0 :(得分:48)

fgrep -x -f file2 -v file1

-x匹配整行

-f FILE从FILE中获取模式

-v反转结果(显示不匹配)

答案 1 :(得分:6)

在Perl中,将文件加载到哈希中,然后通过file1读取,只输出不在file2中的行:

use strict;
use warnings;

my %file2;
open my $file2, '<', 'file2' or die "Couldn't open file2: $!";
while ( my $line = <$file2> ) {
    ++$file2{$line};
}

open my $file1, '<', 'file1' or die "Couldn't open file1: $!";
while ( my $line = <$file1> ) {
    print $line unless $file2{$line};
}

答案 2 :(得分:4)

awk 'FNR==NR{a[$0];next} (!($0 in a))' file2 file1

答案 3 :(得分:0)

comm <(sort a) <(sort b) -3→文件b中不在文件中的行