Estoy haciendo un diccionario de passwords más usados, los populares o frecuentemente más usados por los usuarios (… no pregunten el por qué… JAJAJA), para ello estoy tomando texto de otros diccionarios etc, pero, me veo en la situación de que hay muuuchos passwords duplicados, y necesito eliminar las líneas duplicadas.
O sea, por ejemplo … tenemos el siguiente archivo: pass.txt
Y su contenido es:
asdasd
lola
love
asdasd
windows
admin
linux
asdasd
love
Como vemos, tenemos repetido «love» y «asdasd«, este último 3 veces. ¿cómo eliminar las líneas duplicadas?
Para hacerlo es simple, con este comando:
cat pass.txt | sort | uniq > pass-listos.txt
Esto nos generará un archivo llamado pass-listos.txt que contendrá:
admin
asdasd
linux
lola
love
windows
Lo que hace el comando es MUY simple…
- cat pass.txt -» Lista el contenido del archivo.
- sort -» Ordena el contenido alfabéticamente.
- uniq -» Elimina las líneas duplicadas.
- > pass-listos.txt -» El resultado de los comandos anteriores, ponlo en el archivo pass-listos.txt (que, como no existe, lo creará)
Así de simple… recién descubro que el comando sort sí, es muy bueno… pero, unido a uniq, son una joya de arte 😀
Espero les haya sido de utilidad.
Saludos
27 comentarios, deja el tuyo
Tambien se puede usar sort -u.
Felicidades por el blog, me encanta!
Síp cierto.
Nada, muchas gracias a tí por comentar 😀
Bienvenido 😉
Saludos
El problema con eso es que te cambia el orden de las palabras, funciona… pero al final el resultado difiere bastante del original en el orden (que tal vez en algun caso importe)
Síp en efecto, esto ordena las palabras alfabéticamente, por lo que si el contenido se necesitaba SIN variaciones, ahí esta solución no es la idónea.
No jodas, ¿y si se te ocurre no poner el comando sort? por favor, a pensar un poco más y no tener todo masticado.
cat pass.txt | uniq > pass-listos.txt
no funciona ya lo probe
no funciona porque las líneas «repetidas» deben estar continuas
gracias
es bastante útil
Muy bueno! Una solucion simple y clara. Me gustan las cosas así 🙂
He de reconocer que yo habría hecho algo en Python pero esta solución está muy bien.
Gracias ^-^
hola! muy bueno!
tengo una consulta por favor,
me funcionaría para el siguiente ejemplo:
ABCD 1111
DEFG 2222 45455
ABCD 1111
DEFG 2222
Las filas son iguales pero tienen espacios y algunos caracteres mas… esto comprueba por palabra igual? o por renglon? me explico?
desde ya, te agradezco un monton.
Un abrazo
Hola que tal,
Según ví, esto compara líneas y no columnas, por lo que en el ejemplo que me pones esto quitaría o la 1ra línea o la 3ra, la 2da y 4ta línea a pesar de que son casi idénticas, no son 100% idénticas pues tienen una columna de diferencia. 😉
Gracias por el comentario ^-^
Gracias a vos!! antes tardaba uan hora por oracle para eliminar duplicados… ahora tardo 30 segundos con el cat sort!!
Yo lo requiero en PHP :S
Uff… yo de PHP es que ando muy pero muy corto, no soy programador en realidad 🙁
Lo siento.
Para php existe array_unique(…) en la documentacion oficial de PHP encontraras muchas funciones importantes y eficientes..
Con respecto al sort, salvo que lo necesites, no es necesario… Se desperdicia tiempo de ejecucion y memoria. (para lo que se hace en el post)
Saludos!
Wow!! un diccionario para usarlo como fuerza bruta!!XD
¡Muy buena la combinación de sort con uniq! Me ayudó mucho para eliminar líneas duplicadas.
Gracias
El comentario de Carlos, a pesar de su soberbia, no es válido. Él dice de usar:
cat pass.txt | uniq > pass-listos.txt
sin embargo un prerrequisito de uniq es que el archivo esté ordenado. Debería haberlo pensado un poco más o informarse antes.
muy bueno, me ahorraste una gran cantidad de tiempo al ejecutar mi bash
awk ‘!array_temp[$0]++’ pass.txt > pass-listos.txt
con esto se eliminan las lineas sin tener que ordenar.
Muchas gracias por el aporte!
Aunque molaría poder hacerlo único sin cambiar el orden, pero bueno, un comando fácil y útil!
Gracias, me sirvió muchísimo 😉
tengo esto
C 000006158880201502051056088364 C00-06158880
C 000007601673201503051056088364 C00-07601673
C 000008659304201504051056088364 C00-08659304
T 0809074070562015120818144287185REAÑO RUBIÑOS EMILIA DORIS
T 0809092979972016010818144287185REAÑO RUBIÑOS EMILIA DORIS
C 000005398451201501231044214375 C00-05398451
C 000007674996201503051000000286 C00-07674996
C 000008514288201504051000000463 C00-08514288
C 000011613498201506051056088070 C00-11613498
como hago para que me pinte en un archivo solo los duplicados por abonado y me deje en otro los que no son duplicados
el abonado esta en la pos 23 (10 posiciones)
sort -u -k 1,1 Archivo.txt > resultado.txt
Esto ordena el archivo por el primer campo
2020 y sigue sirviendo, muchas gracias!
Bạn có thể hướng dẫn cách loại bỏ các dòng trùng lặp của nhiều file text trong Linux or Windows được không? Cũng như trường hợp của bạn, khi tôi tạo file từ điển vì tôi chia nội dung ra nên có khá nhiều file và chắc chắn có nhiều dòng trùng lặp giữa các file. Ví dụ : File 1 của tôi có 5 dòng, file 2 có 15 dòng ( có 2 dòng trùng lặp với File 1. Tôi muốn có kết quả , File 1 vẫn giữ nguyên 5 dòng, File 2 thì sẽ loại bỏ 2 dòng giống file 1.
Như bạn biết có nhiều lí do chúng ta ko thể gộp các file txt đó lại với nhau, vì những file text từ điển rất ư là nhiều ký, chẳng hạn như Rockyou. Thực tế tôi muốn thực hiện điều này bên Windows hơn, và chắc chắn ko thể gộp chúng ở bên Windows được. 🙂 Hy vọng nhận được phản hồi từ bạn !