Tengo un archivo de texto que contiene líneas como esta:
This is a thread 139737522087680
This is a thread 139737513694976
This is a thread 139737505302272
This is a thread 139737312270080
.
.
.
This is a thread 139737203164928
This is a thread 139737194772224
This is a thread 139737186379520
¿Cómo puedo estar seguro de la singularidad de cada línea?
NOTA: El objetivo es probar el archivo, no modificarlo si hay líneas duplicadas.

Respuestas:
fuente
uniqlugar desort -uuniqsería un gran error; ¡solo deduplica las líneas adyacentes!sort <file> | uniq -dimprimirá los duplicados.Awk solución:
fuente
echoenEND?&& echoo|| echoes una convención en las respuestas para indicar que un comando hace lo correcto con el código de estado de salida. Lo importante es elexit(1). Idealmente, usarías esto comoif has_only_unique_lines file; then ..., noif [[ $(has_only_unique_lines file) = "no dupes" ]]; then ..., eso sería una tontería.sortwill, independientemente de si hay engaños o no, ¿verdad? ¿Cómo es ese ahorro de memoria?Usando
sort/uniq:Para verificar solo las líneas duplicadas, use la
-dopción para uniq. Esto mostrará solo líneas que están duplicadas, si no mostrará nada:fuente
TLDR
La pregunta original no estaba clara, y leía que el OP simplemente quería una versión única del contenido de un archivo. Eso se muestra a continuación. En la forma actualizada de la pregunta, el OP ahora declara que simplemente quiere saber si el contenido del archivo es único o no.
Prueba si el contenido del archivo es único o no
Simplemente puede usar
sortpara verificar si un archivo es único o contiene duplicados de esta manera:Ejemplo
Digamos que tengo estos dos archivos:
archivo de muestra duplicado archivo de muestra únicoAhora, cuando analizamos estos archivos, podemos saber si son únicos o si contienen duplicados:
prueba de archivos duplicados prueba de archivo únicoPregunta original (contenido único del archivo)
Se puede hacer con solo
sort:fuente
Usualmente
sortutilizo el archivo, luego usouniqpara contar la cantidad de duplicados, luego veosortuna vez más los duplicados al final de la lista.Agregué un duplicado a los ejemplos que proporcionó:
Como hace tiempo que no leo la página de manual
uniq, busqué rápidamente cualquier alternativa. Lo siguiente elimina la necesidad del segundo tipo, si solo desea ver duplicados:fuente
Si no hay duplicados, todas las líneas son únicas:
Descripción: Ordene las líneas del archivo para hacer que las líneas repetidas sean consecutivas (ordenar)
Extraiga todas las líneas consecutivas que sean iguales (uniq -d).
Si hay algún resultado del comando anterior (
[...]), entonces (&&) imprime un mensaje.fuente
¡Esto no estaría completo sin una respuesta de Perl!
Esto imprimirá cada línea no única una vez: así que si no imprime nada, entonces el archivo tiene todas las líneas únicas.
fuente
Usando
cmpysortenbash:o
Sin embargo, esto ordenaría el archivo dos veces, al igual que la respuesta aceptada.
fuente