Вывести строки из одного файла, которые не содержатся в другом файле - PullRequest
24 голосов
/ 28 апреля 2011

Я хочу напечатать строки, которые находятся в одном файле, но не в другом файле. Однако ни один из файлов не отсортирован, и мне нужно сохранить исходный порядок в обоих файлах.

 contents of file1:
 string2
 string1
 string3

 contents of file2:
 string3
 string1

 Output:
 string2

Есть ли простой скрипт, в котором я могу выполнить это?

Ответы [ 4 ]

48 голосов
/ 28 апреля 2011
fgrep -x -f file2 -v file1

-x соответствует всей строке

-f FILE берет шаблоны из FILE

-v инвертирует результаты (показать не совпадает)

6 голосов
/ 28 апреля 2011

В Perl загрузите файл2 в хеш, затем прочитайте файл1, выводя только строки, которых не было в файле2:

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};
}
4 голосов
/ 28 апреля 2011
awk 'FNR==NR{a[$0];next} (!($0 in a))' file2 file1
0 голосов
/ 19 мая 2016

comm <(sort a) <(sort b) -3 → Строки в файле b, которых нет в файле a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...