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 awk
programa 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)