GNU/Linux >> Tutoriales Linux >  >> Linux

¿Eliminar líneas basadas en duplicados dentro de una columna sin ordenar?

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

Linux
  1. ¿Cómo recargar las reglas de Udev sin reiniciar?

  2. ¿Ordenar y contar el número de ocurrencias de líneas?

  3. ¿Concatenar líneas basadas en el primer carácter de la siguiente línea?

  4. ¿Eliminar campos duplicados en una columna determinada?

  5. ¿Ordenar salida por columna?

Cómo ordenar el comando superior según el uso de memoria

Obarun:una distribución de Linux basada en Arch sin Systemd

Listado de líneas de un solo archivo en DIFF

Eliminar todos los enlaces simbólicos de archivos en un solo comando

Usar awk para sumar los valores de una columna, en función de los valores de otra columna

¿Cómo eliminar un archivo sin usar rm?