¿Cuál sería el método más eficiente (sin ejecución repetida de comandos) para eliminar los elementos enumerados en un archivo de otro archivo (desordenados)?
Se puede obtener fácilmente la lista de elementos que no coinciden en el segundo archivo
cat first_file.txt second_file.txt | sort | uniq -u
pero eso también contendría todos los elementos no coincidentes del primer archivo... ¿y ahora qué?
Respuesta1
Este awk
programa realiza una sola pasada por cada archivo:
awk '
NR == FNR {f1[$0] = 1; next}
!($0 in f1)
' file1 file2
comm
es útil para este trabajo. Requiere que sus archivos de entrada estén ordenados:
# output lines unique to file2
comm -13 <(sort file1) <(sort file2)