Hemos visto el comando ordenar en nuestro artículo anterior, pero ordenar cualquier archivo a menudo resultará en muchas líneas duplicadas adyacentes entre sí. Se vuelve demasiado difícil ver correctamente esas líneas.
En este escenario, el uniq
El comando lo ayuda a imprimir líneas duplicadas una vez en la salida. De hecho, descarta las líneas que se repiten e imprime la primera línea repetida adyacente, lo que nos permite ver la salida correctamente.
Las líneas utilizadas en el archivo de entrada para el uniq
El comando no puede exceder los 2048 bytes de longitud (incluidos los caracteres de nueva línea) ni contener caracteres nulos.
Sintaxis
uniq [OPTION]... [INPUT [OUTPUT]]
Ejemplos
A continuación hay una serie de ejemplos, comenzando sin opciones. Veremos varios casos de uso. Algunos involucran solo uniq
y otros dependen de comandos adicionales.
Sin ninguna opción
A continuación se muestra un archivo llamado archivo2 , que contiene algunos datos. Tenga en cuenta que este archivo no está ordenado y que las líneas duplicadas no son adyacentes entre sí. Antes de usar el uniq
comando con este archivo, debemos sort
eso. En el ejemplo, he probado el uniq
comando con el archivo original, pero solo imprime la salida tal como está, como un cat
producción. En el siguiente ejemplo, tomamos la salida de un sort
comando y canalícelo con uniq
dominio. Esto nos ayuda a entender el comportamiento del uniq
comando:
$ cat file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ uniq file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ sort file2
Budhha
Budhha
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
$ sort file2 | uniq
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Con -c, opción --count
A continuación, en el siguiente ejemplo, estamos usando -c
opción para contar las líneas repetidas. El uniq
el comando imprime que cuenta como un prefijo con la línea. El siguiente ejemplo nos dice que la primera línea se repite tres veces, la segunda línea una vez y la tercera línea tres veces:
$ sort file2 | uniq -c
3 Budhha
1 ChhatrapatiShahuMaharaj
3 Dr.B.R.Ambedkar
Con -d, opción --repetida
El -d
La opción imprime solo las líneas que se repiten. Descarta líneas no duplicadas. Por lo tanto, línea ChhatrapatiShahuMaharaj ha sido descartado en el siguiente ejemplo:
$ sort file2 | uniq -d
Budhha
Dr.B.R.Ambedkar
En el siguiente ejemplo, he usado -c
opción para verificar si -d
la opción es solo imprimir las líneas repetidas o no:
$ sort file2 | uniq -cd
3 Budhha
3 Dr.B.R.Ambedkar
Con -D, opción --all-repeated
El -D
La opción imprime líneas repetidas y descarta las líneas no duplicadas. En el siguiente ejemplo, uniq
El comando imprime solo todas las líneas duplicadas y descarta las líneas no duplicadas:
$ sort file2 | uniq -D
Budhha
Budhha
Budhha
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Con -u, --opción única
Opuesto a la opción anterior, el -u
La opción imprime líneas únicas, es decir, líneas no duplicadas. Por lo tanto, en el siguiente ejemplo, imprime ChhatrapatiShahuMaharaj como salida:
$ sort file2 | uniq -u
ChhatrapatiShahuMaharaj
Con -i, la opción --ignore-case
Usando el -i
opción, podemos ignorar la distinción entre mayúsculas y minúsculas de los caracteres. A continuación, he dado una salida de uniq
comando con y sin -i
opción de comparar:
$ cat file3
aaaa
aaaa
AAAA
AAAA
bbbb
BBBB
$ uniq file3
aaaa
AAAA
bbbb
BBBB
$ uniq -i file3
aaaa
bbbb
Con -f, --skip-fields=N
A veces necesitamos omitir algunos campos para filtrar líneas duplicadas. Esto es posible usando -f
opción. En el siguiente ejemplo, nos saltamos el primer campo (primera columna) para comparar las líneas duplicadas del segundo campo. He dado ambos ejemplos, con y sin -f
opción, para una mejor comprensión del comportamiento de la opción:
$ cat file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq -f 1 file5
Amit aaaa
Advi bbbb
[ A los lectores también les gustó:Trabajar con canalizaciones en la línea de comandos de Linux ]
Con -s, la opción --skip-char=N
Al igual que el campo, también podemos omitir caracteres usando -s
opción. Tenga en cuenta que uniq
El comando imprime solo la primera línea duplicada y descarta otras líneas duplicadas. Por lo tanto 33aa y 55bb han sido descartados. Aquí está el ejemplo:
$ cat file4
22aa
33aa
44bb
55bb
$ uniq file4
22aa
33aa
44bb
55bb
$ uniq -s 2 file4
22aa
44bb
Con la opción -w, --check-chars=N
Al igual que omitir caracteres, también podemos considerar caracteres usando -w
opción, como en el ejemplo:
$ cat file6
aa12
aa34
bb56
bb78
$ uniq file6
aa12
aa34
bb56
bb78
$ uniq -w 2 file6
aa12
bb56
Con la opción --version
Utilice la --version
opción para comprobar la versión del uniq
comando.
$ uniq --version
uniq (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Richard M. Stallman and David MacKenzie.
[ Descarga gratuita:hoja de referencia de comandos avanzados de Linux. ]
Resumir
uniq
no detecta líneas repetidas a menos que sean adyacentes. El uniq
El comando puede contar e imprimir el número de líneas repetidas. Al igual que las líneas duplicadas, también podemos filtrar líneas únicas (líneas no duplicadas) y también podemos ignorar la distinción entre mayúsculas y minúsculas. Podemos omitir campos y caracteres antes de comparar líneas duplicadas y también considerar caracteres para filtrar líneas.
Después de revisar los múltiples uniq
opciones de comando, me gustaría compartir una pequeña imagen para tenerla como referencia.