Elimina líneas duplicadas de un archivo

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…

  1. cat pass.txt -» Lista el contenido del archivo.
  2. sort -» Ordena el contenido alfabéticamente.
  3. uniq -» Elimina las líneas duplicadas.
  4. > 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

Wallpaper: Si desean bajar el wallpaper “I Love #!/bin/bash” aquí tienen el link:

Descarga Wallpaper


25 comentarios

  1.   Carlos dijo

    Tambien se puede usar sort -u.

    Felicidades por el blog, me encanta!

    1.    KZKG^Gaara dijo

      Síp cierto.
      Nada, muchas gracias a tí por comentar 😀

      Bienvenido 😉
      Saludos

  2.   Diego dijo

    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)

    1.    KZKG^Gaara dijo

      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.

    2.    Carlos dijo

      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

      1.    Eliuber dijo

        no funciona ya lo probe

      2.    bob dijo

        no funciona porque las líneas “repetidas” deben estar continuas

  3.   nonamed dijo

    gracias

    es bastante útil

  4.   Giskard dijo

    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.

    1.    KZKG^Gaara dijo

      Gracias ^-^

  5.   tino dijo

    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

    1.    KZKG^Gaara dijo

      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 ^-^

      1.    TINO dijo

        Gracias a vos!! antes tardaba uan hora por oracle para eliminar duplicados… ahora tardo 30 segundos con el cat sort!!

  6.   MegaBedder dijo

    Yo lo requiero en PHP :S

    1.    KZKG^Gaara dijo

      Uff… yo de PHP es que ando muy pero muy corto, no soy programador en realidad 🙁

      Lo siento.

    2.    brunocascio dijo

      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!

  7.   frikilui dijo

    Wow!! un diccionario para usarlo como fuerza bruta!!XD

  8.   Gustavo dijo

    ¡Muy buena la combinación de sort con uniq! Me ayudó mucho para eliminar líneas duplicadas.

    Gracias

  9.   Gustavo dijo

    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.

  10.   Eliuber dijo

    muy bueno, me ahorraste una gran cantidad de tiempo al ejecutar mi bash

  11.   Pedro Picapiedra dijo

    awk ‘!array_temp[$0]++’ pass.txt > pass-listos.txt
    con esto se eliminan las lineas sin tener que ordenar.

  12.   miniminiyo dijo

    Muchas gracias por el aporte!

    Aunque molaría poder hacerlo único sin cambiar el orden, pero bueno, un comando fácil y útil!

  13.   Felipe Gutiérrez dijo

    Gracias, me sirvió muchísimo 😉

  14.   ernesto dijo

    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)

  15.   Fernando dijo

    sort -u -k 1,1 Archivo.txt > resultado.txt

    Esto ordena el archivo por el primer campo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.