Forum Programmation.shell Trier avec sort

Posté par  .
Étiquettes : aucune
1
31
juil.
2009

Bonjour,

Je m'arrache les cheveux depuis ce matin avec les man de sort. Quelqu'un saurait-il me dire comment je peux trier avec sort par ordre numérique croissant le résultat suivant :


/dev/md/dsk/d0
/dev/md/dsk/d100
/dev/md/dsk/d101
/dev/md/dsk/d3
/dev/md/dsk/d4
/dev/md/dsk/d40
/dev/md/dsk/d7
/dev/md/dsk/d80
/dev/md/dsk/d81
  • # ici ca marche

    Posté par  . Évalué à -1.

    $ sort --version
    sort (GNU coreutils) 6.10

    $ ls /dev/tty[12]* | sort
    /dev/tty1
    /dev/tty10
    /dev/tty11
    /dev/tty12
    /dev/tty13
    /dev/tty14
    /dev/tty15
    /dev/tty16
    /dev/tty17
    /dev/tty18
    /dev/tty19
    /dev/tty2
    /dev/tty20
    /dev/tty21
    /dev/tty22
    /dev/tty23
    /dev/tty24
    /dev/tty25
    /dev/tty26
    /dev/tty27
    /dev/tty28
    /dev/tty29
    • [^] # Re: ici ca marche

      Posté par  . Évalué à 2.

      J'ai le même trie que toi. Ce n'est pas le résultat que je recherche. Il me faudrait un trie 1... 2...10.. 20.... et non pas 1... 10... 11.... 2... 20
      • [^] # Re: ici ca marche

        Posté par  (site web personnel) . Évalué à 1.

        Avec sort uniquement je crois pas que tu puisses faire ce que tu veux.
        Par contre :

        ls /dev/tty[12]* | grep -o "[0-9]*"|sort -n

        donne le résultat attendu :

        1
        2
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29

      • [^] # Re: ici ca marche

        Posté par  . Évalué à 2.

        suis une buse, j'etais focalisé sur les 1x et 2x
        j'ai zappé le 1 et 2

        cf la solution en dessous
  • # man sort

    Posté par  (site web personnel) . Évalué à 8.

    Comme d'hab, RTFM.
    En prenant l'exemple de /dev/tty* j'ai:

    # ls /dev/tty* |sort -n -t '/' -k 3.4
    /dev/tty1
    /dev/tty2
    /dev/tty3
    /dev/tty4
    /dev/tty5
    /dev/tty6
    /dev/tty7
    /dev/tty8
    /dev/tty9
    /dev/tty10
    ...
  • # sort -n -k 1.14

    Posté par  . Évalué à 1.

    Il suffit de ne prendre en compte que la partie numérique des données:
    $ sort -n -k 1.14
    /dev/md/dsk/d0
    /dev/md/dsk/d100
    /dev/md/dsk/d101
    /dev/md/dsk/d3
    /dev/md/dsk/d4
    /dev/md/dsk/d40
    /dev/md/dsk/d7
    /dev/md/dsk/d80
    /dev/md/dsk/d81
    ^D
    /dev/md/dsk/d0
    /dev/md/dsk/d3
    /dev/md/dsk/d4
    /dev/md/dsk/d7
    /dev/md/dsk/d40
    /dev/md/dsk/d80
    /dev/md/dsk/d81
    /dev/md/dsk/d100
    /dev/md/dsk/d101
    • [^] # Re: sort -n -k 1.14

      Posté par  . Évalué à 1.

      Elle marche bien cette solution, rhaa... J'y étais presque en regardant les man de sort avec l'argument k...

      C'est parfait ! Merci à tous pour votre aide !
  • # msort ?

    Posté par  . Évalué à 1.

    Pour des tris plus tordus:
    http://freshmeat.net/projects/msort
    (bien pratique pour une liste de noms de domaines par exemple !)
  • # ls -v

    Posté par  (site web personnel) . Évalué à 1.

    man ls:

    -v sort by version

Suivre le flux des commentaires

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