Tengo archivos grandes de 3 columnas (~10 000 líneas) y me gustaría eliminar líneas cuando el contenido de la tercera columna de esa línea aparece en la tercera columna de otra línea. Los tamaños de los archivos hacen que ordenarlos sea un poco engorroso, y no puedo usar algo como el siguiente código porque las líneas completas no son idénticas; solo el contenido de la columna 3.
awk '!seen[$0]++' filename
Respuesta aceptada:
Simplemente cambie su comando awk a la columna en la que desea eliminar las líneas duplicadas en función de esa columna (en su caso, la tercera columna):
awk '!seen[$3]++' filename
Este comando le dice a awk
qué líneas imprimir. La variable $3
contiene todo el contenido de la columna 3 y los corchetes son acceso a la matriz. Entonces, para cada tercera columna de la línea en el nombre del archivo, el nodo de la matriz llamado seen
se incrementa y la línea se imprime si el contenido de ese nodo (columna 3) no era (!
) establecido previamente.
Lo anterior funcionará si sus columnas en el archivo de entrada están delimitadas con espacios/tabulaciones, si eso es otra cosa, deberá indicarle que awk con su -F
opción. Entonces, por ejemplo, si las columnas están delimitadas por comas (,
) y desea eliminar líneas basadas en la tercera columna, use el comando de la siguiente manera:
awk -F',' '!seen[$3]++' filename