
Какой метод будет наиболее эффективным (без повторного выполнения команды) для удаления элементов, перечисленных в одном файле, из другого файла (неупорядоченного)?
Список несовпадающих элементов во втором файле можно легко получить с помощью
cat first_file.txt second_file.txt | sort | uniq -u
но это также будет содержать все несовпадающие элементы из первого файла... что теперь?
решение1
Эта awk
программа выполняет один проход по каждому файлу:
awk '
NR == FNR {f1[$0] = 1; next}
!($0 in f1)
' file1 file2
comm
полезен для этой работы. Он требует сортировки входных файлов:
# output lines unique to file2
comm -13 <(sort file1) <(sort file2)