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
uniq
lugar desort -u
uniq
sería un gran error; ¡solo deduplica las líneas adyacentes!sort <file> | uniq -d
imprimirá los duplicados.Awk solución:
fuente
echo
enEND
?&& echo
o|| echo
es 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.sort
will, 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
-d
opció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
sort
para 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
sort
utilizo el archivo, luego usouniq
para contar la cantidad de duplicados, luego veosort
una 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
cmp
ysort
enbash
:o
Sin embargo, esto ordenaría el archivo dos veces, al igual que la respuesta aceptada.
fuente