Удалить список элементов из другого файла в bash

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

Связанный контент