Ответ 1
fgrep -x -f file2 -v file1
-x соответствует всей строке
-f FILE принимает шаблоны из FILE
-v инвертирует результаты (показывает несоответствие)
Я хочу напечатать строки, которые находятся в одном файле, но не в другом файле. Тем не менее, ни один файл не сортируется, и мне нужно сохранить исходный порядок в обоих файлах.
contents of file1:
string2
string1
string3
contents of file2:
string3
string1
Output:
string2
Есть ли простой script, который я могу выполнить в?
fgrep -x -f file2 -v file1
-x соответствует всей строке
-f FILE принимает шаблоны из FILE
-v инвертирует результаты (показывает несоответствие)
В 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};
}
awk 'FNR==NR{a[$0];next} (!($0 in a))' file2 file1
comm <(sort a) <(sort b) -3
→ Строки в файле b, которые не находятся в файле a