Remova a lista de itens de outro arquivo no bash

Remova a lista de itens de outro arquivo no bash

Qual seria o método mais eficiente (sem execução repetida de comandos) para remover itens listados em um arquivo de outro arquivo (não ordenado)?

Pode-se facilmente obter a lista de itens não correspondentes no segundo arquivo,

cat first_file.txt second_file.txt | sort | uniq -u

mas isso também conteria todos os itens incomparáveis ​​do primeiro arquivo... e agora?

Responder1

Este awkprograma faz uma única passagem por cada arquivo:

awk '
    NR == FNR {f1[$0] = 1; next}
    !($0 in f1)
' file1 file2

comm é útil para este trabalho. Requer que seus arquivos de entrada sejam classificados:

# output lines unique to file2
comm -13 <(sort file1) <(sort file2)

informação relacionada