Удалить список элементов из другого файла в 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)
Другие вопросы по тегам