1. Introducción a los entornos de trabajo UNIX

1.11. Buscar, ordenar y asociar ficheros

1.11.5. «uniq»

Este comando te ayuda a identificar y eliminar duplicados. Se ha de utilizar con entradas ordenadas, ya que la comparación se realiza solo entre líneas adyacentes, lo que significa que primero hay que utilizar el comando sort antes que el comando uniq. Se muestran a continuación las opciones de uso común.

  • -u muestra solo las entradas únicas.
  • -d muestra solo las entradas duplicadas.
  • -D muestra todas las copias de duplicados.
  • -c prefijo de conteo.
  • -i ignora mayúsculas y minúsculas al determinar duplicados.
  • -f omite los primeros N campos la separación de campo; se basa solo en uno o más caracteres de espacio/tabulación.
  • -s omite los primeros N
  • -w restringe la comparación a los primeros N

De forma predeterminada, uniq retiene sólo una copia de las líneas duplicadas.

$ cat sistemas.txt
GWAS

RNA-Seq

WES

GWAS

ChIP-Seq

RNA-Seq

NGS

RNA-Seq

# Ordena y elimina los duplicados

$ sort sistemas.txt | uniq
ChIP-Seq

GWAS

NGS

RNA-Seq

WES

# Ordena e imprime únicamente las ocurrencias no repetidas

$ sort sistemas.txt | uniq -u
ChIP-Seq

NGS

WES

# Ordena e imprime únicamente las ocurrencias repetidas

$ sort sistemas.txt | uniq -d
GWAS

RNA-Seq

# Ordena por número de ocurrencia

$ sort sistemas.txt | uniq -c | sort -nr
     3 RNA-Seq

     2 GWAS

     1 WES

     1 NGS

     1 ChIP-Seq

Si continuamos con el fichero hg38_RefSeq para eliminar líneas duplicadas consecutivas, se utiliza el comando uniq. Es importante recordar que, para una eliminación completa de duplicados, es necesario ordenar el archivo con sort antes de utilizar uniq:

$ cat hg38_RefSeq | cut -f 2,4| sort -2rn | uniq