uniq

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

uniq es un comando de la familia de Sistemas Operativos Unix que permite remover o mostrar las lineas repetidas de un archivo o bien provenientes de la entrada estándar (stdin).[1]

Es un requisito necesario para el buen funcionamiento de uniq que la información de entrada (archivo o stdin) se encuentre previamente ordenada, o que por lo menos las lineas repetidas se encuentren contiguas. Por dicho motivo es muy común usar uniq junto con el comando sort, que se encarga del ordenamiento.

Este comando presenta algunas limitaciones a la hora de hacer comparaciones para determinar si una linea es o no única: o se compara la totalidad de la linea, o bien una porción de la misma que puede estar determinada por alguno de los siguientes criterios :

  • Ignorando los primeros N Caracteres (-s) o Campos (-f).
  • Tomando solo los primeros N Caracteres (-w)

Dicha limitación impide por ejemplo que un usuario pueda determinar que una linea es única en base a un único campo, siempre y cuando no sea el único o último de las lineas.


Modo de Uso[editar]

La invocación del comando uniq tiene la siguiente sintaxis:

 uniq [PARAMETRO]... [ENTRADA [SALIDA]]

La forma más simple de invocarlo es sin parámetros y con un Archivo ordenado como entrada, para lo cual uniq nos muestra en pantalla las lineas sin sus repeticiones. En caso de que indiquemos un segundo archivo, este sera utilizado como salida, para guardar el resultado del procesamiento.

A continuación se enumeran los parámetros:

-c
Agrega un prefijo a las lineas con el número de ocurrencias.
-d
Solo se muestra una sola ocurrencia de las lineas duplicadas.
-D
Se muestran las lineas duplicadas. También es posible usar el parámetro --all-repeated=MODO_DELIMITADOR, donde se le puede indicar opcionalmente un modo de separar cada conjunto de ocurrencias. Dentro de los modos se encuentran
  • none: es el modo default, es equivalente a no indicar ningún modo.
  • prepend:Se muestran separadas por una linea en blanco, con una adicional al comienzo.
  • separate:Se muestran separadas por una linea en blanco.
-f numero, --skip-fields=numero
Determina que se realiza la comparación con sin los primeros N campos. Un campo es considerado una cadena de texto separada por un espacio en blanco o por el carácter tabulador.
-s numero, --skip-chars=numero
Determina que se realiza la comparación sin con los primeros N caracteres.
-i 
Se ignora las Mayúsculas/Minúsculas al hacer la comparación.
-u
Se muestra las lineas que no poseen repeticiones.
-z, --zero-terminated
Establece que las lineas se terminan con el byte cero, no con el de nueva linea.
-w, --check-chars=numero
La comparación se realiza con no más de N caracteres de cada linea.


Ejemplos[editar]

A continuación se plantean algunos ejemplos usando el siguiente archivo, denominado archivo.txt, el cual posee 3 campos ordenados alfabéticamente:

Ananá 1 bueno
Banana 2 malo
Banana 2 malo
Durazno 3 malo
Manzana 4 malo
Manzana 4 malo
Manzana 5 malo
Pera 6 regular
Uva 7 regular
Uva 8 regular

Eliminar las lineas duplicadas

uniq archivo.txt

Resultado:

Ananá 1 bueno
Banana 2 malo
Durazno 3 malo
Manzana 4 malo
Manzana 5 malo
Pera 6 regular
Uva 7 regular
Uva 8 regular

Mostrar las lineas que no posea duplicados:

uniq -u archivo.txt

Resultado:

Ananá 1 bueno
Durazno 3 malo
Manzana 5 malo
Pera 6 regular
Uva 7 regular
Uva 8 regular

Mostrar las lineas sin repeticiones ignorando los primeros 2 campos (frutas y números):

uniq -f2 archivo.txt

Resultado:

Ananá 1 bueno
Banana 2 malo
Pera 6 regular

Totalizar (-c) las lineas que posean repeticiones (-d), ignorando los primeros 2 campos (frutas y números), :

uniq -d -f2 -c archivo.txt

Resultado:

6 Banana 2 malo
3 Pera 6 regular

Véase también[editar]

Enlaces externos[editar]


Referencias[editar]