Supprimer leslignes en double d'un fichier

Résolu
Ssylvainsab Messages postés 2892 Statut Modérateur -  
 samsoul92 -
Bonjour.

COmme l'indique le titre, j'ai un fichier texte très gros (presque 20000 Lignes), avec plusieurs lignes en double, en triple, en quadruple, voire des centaines de fois.
J'aurais besoin de supprimer les lignes en double du fichier.
Pour précision, toutes les lignes se terminent par un point-virgule ";" et ce caractère est présent une fois et une seule par ligne.
(en fait chaque ligne est une commande)

Donc je cherche comment faire un script en bash qui parcoure les lignes de mon fichier une à une, et pour chaque ligne vérifie s'il en existe une autre pareille, et si c'est le cas l'efface.

Quelqu'un a-t-il une solution ?
Merci.
--
Sylvain

12 réponses

  1. Bourgeois74 Messages postés 9 Statut Membre 28
     
    sorry
    j'avais pas fait attention car g suis débutant
    donc avec : cat fichier | sort | uniq
    cela fonctionne!
    33
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Teste et tu verras, c'est le meilleur moyen et le meilleur apprentissage ;-))
      0
    2. erreer
       
      cat fichier | sort -u
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      0
    4. boly38 Messages postés 267 Date d'inscription   Statut Membre Dernière intervention   80
       
      petit complément pour une suppression des doublons en une seule ligne, voici ce que j'ai fait (je passe par un fichier temporaire pour éviter d'effacer le fichier que je suis en train de lire) :
      (cat monfichier|uniq>monfichier.tmp) &&  mv -f monfichier.tmp monfichier
      0
  2. no
     
    je vous donne vite fait un algo pour supprimer les lignes mutiples sans modifier leur ordre initial (scripté en bash mais performant)

    il faut copier coller les lignes ci dessous dans un fichier (Je l'ai appelé "vir_ligne_doublon")
    un chmod +x dessus.
    EN GROS:
    je repère les doublons avec les binaire sort et uniq ( super rapidement) et ensuite je filtre chaque ligne une par une avec un filtre qui ne se met a jour qu'avec les lignes en doublon. (Les autres n'ayant pas besoin d'être filtrées)

    Utilisation : ./vir_ligne_doublon Fichier_a_épurer
    Cela génère un nouveau fichier nommé Fichier_a_épurer.nodoublon

    #!/bin/bash
    FILE=$1
    echo Analyse :
    sort $FILE|uniq -c|tee report|awk '$1 > 1'|sed "s/^[^0-9]*\([0-9][0-9]*\) \(.*\)$/Il y a \1 fois: \2/"
    echo "Continuer ? (Ou CTRL/C)" ; read A
    awk '$1 > 1' report|sed "s/^[^0-9]*[0-9][0-9]* //" > en_doublon
    >filtre ; >$FILE.nodoublon
    while read LIGNE
    do
    echo "$LIGNE"|grep -vxf filtre |tee -a $FILE.nodoublon|grep -xf en_doublon >> filtre
    done < $FILE
    rm en_doublon filtre
    echo Nombre de lignes avant et apres
    wc -l $FILE*
    echo Resultat:
    sed "s/^/ /" $FILE.nodoublon
    5
  3. smed_79 Messages postés 1298 Date d'inscription   Statut Contributeur Dernière intervention   850
     
    plus simple j'ai trouvé ça Delete duplicate lines : http://textop.us/Lines-tools/Delete-Duplicate-Lines
    3
    1. boly38 Messages postés 267 Date d'inscription   Statut Membre Dernière intervention   80
       
      impossible d'y accéder : "This Account Has Been Suspended" :(
      0
  4. spacm Messages postés 143 Statut Membre 30
     
    si l'ordre des lignes n'est pas important:

    cat fichier | sort | uniq

    sinon, perl est mieux pour ça à mon avis
    2
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Y-a-t'il la possibilité de trier ton fichier avant ? Si oui :
    sort -u fichier
    ;-))
    2
  7. samsouma4t2 Messages postés 3 Statut Membre 1
     
    bonjour,
    ya pas la même commande (sort -u) sous windows ... j'arrive pas à effacer les doublons .. quand j'essaye avec cette commande il me sort cet erreur (fichier d'entré spécifié deux fois)
    1
  8. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Trier mon fichier, c'est à dire mettre les lignes identiques les unes après les autres ?
    C'est déjà fait ;-)
    --
    Sylvain
    0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Alors la solution t'est donnée au-dessus en double ;-))
    0
  10. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Merci !
    Waow, même avec ce tri, j'ai encore 1000 lignes... ça en fait du code :p
    --
    Sylvain
    0
  11. Bourgeois74 Messages postés 9 Statut Membre 28
     
    bonjour
    Dans une liste, stockée dans un fichier texte avec un enregistrement par ligne,j'aimerais écrire un commande qui supprime les doublons
    kelkun a t il une idée?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Merci de relire le post et notamment la 1ère réponse !
      0
    2. FAIL
       
      Epic !
      0
  12. Bourgeois74 Messages postés 9 Statut Membre 28
     
    Danke!
    merci bien!
    ça roule
    0
  13. samsoul92
     
    Merci pour le script
    tres bon travail.
    0