GNU/Linux >> Tutoriales Linux >  >> Linux

¿Eliminar líneas duplicadas adyacentes mientras se mantiene el orden?

Tengo un archivo con una columna con nombres que se repiten varias veces cada uno. Quiero condensar cada repetición en una, manteniendo cualquier otra repetición del mismo nombre que no sea adyacente a otras repeticiones del mismo nombre.

P.ej. Quiero girar el lado izquierdo al lado derecho:

Golgb1    Golgb1    
Golgb1    Akna
Golgb1    Spata20
Golgb1    Golgb1
Golgb1    Akna
Akna
Akna
Akna
Spata20
Spata20
Spata20
Golgb1
Golgb1
Golgb1
Akna
Akna
Akna

Esto es lo que he estado usando:perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt
Sin embargo, este método solo mantiene un representante de la izquierda (es decir, Golb1 y Akna no se repiten).

¿Hay alguna manera de mantener nombres únicos para cada bloque, manteniendo los nombres que se repiten en múltiples bloques no adyacentes?

Respuesta aceptada:

uniq hará esto por ti:

$ uniq inputfile
Golgb1
Akna
Spata20
Golgb1
Akna

Linux
  1. ¿Cómo eliminar líneas duplicadas dentro de un archivo de texto?

  2. ¿Eliminar campos duplicados en una columna determinada?

  3. ¿Cómo quitar el Bom de un archivo Utf-8?

  4. 7 ejemplos de comandos Linux Uniq para eliminar líneas duplicadas del archivo

  5. Cómo usar sed para eliminar las últimas n líneas de un archivo

5 formas de contar el número de líneas en un archivo

¿Cómo eliminar duplicados en .bash_history, conservando el orden?

¿Eliminar líneas de encabezado adicionales del archivo, excepto la primera línea?

Diff ¿Dónde las líneas son en su mayoría iguales pero desordenadas?

¿Eliminar línea que contiene cierta cadena y la siguiente línea?

El bucle while en los scripts de Shell