Вывести строки из одного файла, которые не содержатся в другом файле
Я хочу напечатать строки, которые находятся в одном файле, но не в другом файле. Однако ни один из файлов не отсортирован, и мне нужно сохранить первоначальный порядок в обоих файлах.
contents of file1:
string2
string1
string3
contents of file2:
string3
string1
Output:
string2
Есть ли простой сценарий, в котором я могу это сделать?
4 ответа
fgrep -x -f file2 -v file1
-x соответствует всей строке
-f ФАЙЛ берет шаблоны из ФАЙЛА
-v инвертирует результаты (показать несоответствие)
В Perl загрузите file2 в хеш, затем прочитайте 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};
}
comm <(sort a) <(sort b) -3
→ Строки в файле b, которых нет в файле a