Forum Programmation.shell Ne garder qu'une seule occurrence de chaque ligne d'un fichier

Posté par . Licence CC by-sa.
2
28
nov.
2016

Bonjour,

J'ai un fichier texte avec 5000 lignes dont beaucoup sont en double ou triple.
J'aimerai ne garder qu'une seule occurrence de chaque lignes.
J'ai essayé avec sort | uniq -u mais il supprime toute les occurrences des lignes en doublon.
Savez vous comment je peux faire pour ne conserver que une seule ligne?

Merci

  • # -u

    Posté par (page perso) . Évalué à 5.

    -u ne garde que les lignes qui ne sont pas dupliquées.
    N'utilise juste pas -u

    • [^] # Re: -u

      Posté par . Évalué à 3.

      Merci.
      Parfait

  • # en francais dans le texte

    Posté par . Évalué à 5.

    J'aimerai ne garder qu'une seule occurrence de chaque lignes.

    donc supprimer les doublons pour les coller sur une seule ligne

    J'ai essayé avec sort | uniq -u mais il supprime toute les occurrences des lignes en doublon.

    c'est exactement ce que tu demandes à ta ligne, tu demandes à la commande uniq
    de ne garder que les lignes qui sont unique via l'option -u fait la ligne

    sans cette option cela doit fonctionner parfaitement

    soit un fichier

    a
    b
    c
    b
    c
    c

    sort lefichier renvoie

    a
    b
    b
    c
    c
    c

    sort -u le fichier ou sort lefichier | uniq renvoient tous les deux

    a
    b
    c
  • # sort tout seul

    Posté par (page perso) . Évalué à 7.

    Comme mentionné plus haut, un sort | uniq fera l'affaire. Mais cette idée du -u, je gage que tu ne la sors pas de nulle part : c'est également une option de sort, tout à fait appropriée pour ton cas, parce qu'elle lui demande de faire aussi le boulot de uniq. Autrement dit, ces deux commandes sont équivalentes :

    sort | uniq
    sort -u
    • [^] # Re: sort tout seul

      Posté par . Évalué à 6.

      Histoire de pinailler un peu, les deux commandes sont fonctionnellement équivalentes, mais à choisir, je prendrais toujours le "sort -u". Il me parait préférable d'utiliser une seule commande au lieu de deux : un fork en moins, et une gestion d'erreur plus facile si on décide d'en faire. Sur un script utiliser une fois, on s'en fout un peu, mais si ça doit atterrir dans un truc lancé régulièrement, c'est bien d'avoir ces considérations en tête.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.