Aquí hay comandos en un archivo aleatorio de pastebin :
wget -qO - http://pastebin.com/0cSPs9LR | wc -l
350
wget -qO - http://pastebin.com/0cSPs9LR | sort -u | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq -u | wc -l
258
Las páginas del manual no tienen claro qué -uestá haciendo la bandera. ¿Algún consejo?

Respuestas:
Version corta:
uniq, sin-u, hace que cada línea de la salida sea única.uniq -usolo imprime cada línea única desde la entrada .Versión ligeramente más larga:
uniqes para tratar con archivos que tienen líneas duplicadas, y solo cuando esas líneas aparecen sucesivamente en la entrada. Entonces, para sus propósitos, una línea única es aquella que no se duplica inmediatamente.(
uniqtiene una memoria a corto plazo muy limitada; nunca recordará si una línea apareció antes en la entrada, a menos que fuera la línea inmediatamente anterior; esta es la razón por la cualuniqse combina muy a menudosort).Cuando encuentra una serie de líneas duplicadas
uniq, sin el-uargumento, imprime una copia de esa línea. (Hace que cada línea de la salida sea única ).Con el
-uargumento, imprime cero copias de esa línea: las ejecuciones de duplicados simplemente se omiten de la salida.fuente
sort -ulugar desort | uniq.uniqhace normalización y colación, sí. Pero incluso entonces es solo una consideración local: usted sabe dónde aparecerá la línea en la salida ordenada, y solo tiene que seleccionar cuál de varias líneas adyacentes desea mantener. Si la entrada no está ordenada, entonces la decisión afecta a toda la operación de unificación, por ejemplo, si va a mantener el último duplicado, no puede generar nada hasta que haya leído la última línea de la entrada ...uniqcon-uomite cualquier línea que tenga duplicados. Así:Por lo general,
uniqimprime líneas como máximo una vez (suponiendo una entrada ordenada). Esta opción realmente imprime líneas que son verdaderamente únicas (que no han vuelto a aparecer).fuente
uniqpodría llamarsedistinct, ya que imprime todas las líneas distintas, mientras queuniq -uimprime todas las líneas únicas.uniqen alguna configuración regional.la especificación POSIX de uniq lo describió claramente:
-uopción haceruniqno imprimir líneas repetidas.La mayoría de las
uniqimplementaciones usaban comparación de bytes, mientras que GNUuniqusaba el orden de clasificación para filtrar líneas duplicadas. Por lo tanto, puede producir un resultado incorrecto en algunas configuracionesen_US.UTF-8regionales , por ejemplo, en la configuración regional:y
-uno te dio líneas:Por lo tanto, debe establecer la configuración regional
Cpara obtener la comparación de bytes:fuente
uniq(aunque aparentemente la intención de POSIX era que debería hacer una comparación de bytes en lugar de una comparación strcoll () como ensort -u) como aquellas configuraciones regionales que erróneamente tienen ① ordenando lo mismo que ②. Al menos GNUuniqes consistente consort -u.uniqrequerido para hacer memcmp / strcmp en lugar de strcoll, eso no es muy evidente para mí, pero eso fue para Geoff . Sobre las configuraciones regionales de GNU que tienen ① ordenando lo mismo que ②, eso es claramente un error ya que no hay razón por la que deberían ordenar lo mismo. POSIX lo permite, pero se avecinan algunos cambios .normal:
uniq: no hay dos líneas repetidas posteriores
ordenado
sort -u: no hay dos líneas repetidas
sort / uniq: todos distintos
cuenta sucesos distintos
solo líneas que no se repiten (no se ordenan primero)
solo líneas que no se repiten (después de ordenar)
uniq -d: solo imprime líneas duplicadas, una para cada grupo
.. contado
fuente