Necesitas usar comm
:
comm -13 first.txt second.txt
hará el trabajo.
PD. el orden del primer y segundo archivo en la línea de comandos es importante.
también es posible que deba ordenar los archivos antes:
comm -13 <(sort first.txt) <(sort second.txt)
en caso de que los archivos sean numéricos, agregue -n
opción a sort
.
Esto debería funcionar
comm -13 <(sort file1) <(sort file2)
Parece que sort -n (numérico) no puede funcionar con comm, que usa sort (alfanumérico) internamente
f1.txt
1
2
21
50
f2.txt
1
3
21
50
21 debe aparecer en la tercera columna
#WRONG
$ comm <(sort -n f1.txt) <(sort -n f2.txt)
1
2
21
3
21
50
#OK
$ comm <(sort f1.txt) <(sort f2.txt)
1
2
21
3
50
cat f1.txt f2.txt | sort |uniq > file3
grep -Fxv -f first-file.txt second-file.txt
Básicamente busca todas las líneas en second-file.txt
que no coinciden con ninguna línea en first-file.txt
. Puede ser lento si los archivos son grandes.
Además, una vez que ordene los archivos (use sort -n
si son numéricos), entonces comm
también debería haber funcionado. Que error da? Prueba esto:
comm -23 second-file-sorted.txt first-file-sorted.txt