Удалить список элементов из другого файла в bash
Каков наиболее эффективный метод (без повторного выполнения команды) для удаления элементов, перечисленных в одном файле, из другого файла (неупорядоченный)?
Можно легко получить список несоответствующих элементов во втором файле,
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)