remove from duplicate bash shell

bash - remove duplicates from file linux



Eliminar entradas duplicadas con un script Bash (4)

Elimina líneas duplicadas y consecutivas de un archivo (emula "uniq").
Se mantiene la primera línea en un conjunto de líneas duplicadas, se eliminan los restos.

sed ''$!N; /^/(.*/)/n/1$/!P; D''

Esta pregunta ya tiene una respuesta aquí:

Quiero eliminar entradas duplicadas de un archivo de texto, por ejemplo:

kavitha= Tue Feb 20 14:00 19 IST 2012 (duplicate entry) sree=Tue Jan 20 14:05 19 IST 2012 divya = Tue Jan 20 14:20 19 IST 2012 anusha=Tue Jan 20 14:45 19 IST 2012 kavitha= Tue Feb 20 14:00 19 IST 2012 (duplicate entry)

¿Hay alguna manera posible de eliminar las entradas duplicadas utilizando un script Bash?

Salida deseada

kavitha= Tue Feb 20 14:00 19 IST 2012 sree=Tue Jan 20 14:05 19 IST 2012 divya = Tue Jan 20 14:20 19 IST 2012 anusha=Tue Jan 20 14:45 19 IST 2012


Esto podría funcionar para usted:

cat -n file.txt | sort -u -k2,7 | sort -n | sed ''s/.*/t/ /;s//([0-9]/{4/}/).*//1/''

o esto:

awk ''{line=substr($0,1,match($0,/[0-9][0-9][0-9][0-9]/)+3);sub(/^/," ",line);if(!dup[line]++)print line}'' file.txt


Perl one-liner similar a la solución awk de @ kev:

perl -ne ''print if ! $a{$_}++'' input

Esta variación elimina los espacios en blanco finales antes de comparar:

perl -lne ''s//s*$//; print if ! $a{$_}++'' input

Esta variación edita el archivo in situ:

perl -i -ne ''print if ! $a{$_}++'' input

Esta variación edita el archivo in situ y input.bak una copia de seguridad de input.bak

perl -i.bak -ne ''print if ! $a{$_}++'' input


Puedes sort luego uniq :

$ sort -u input.txt

O usa awk :

$ awk ''!a[$0]++'' input.txt