[Unix] tri de fichier - special

Résolu
Bonjour,

je suis sur un shell unix et je dois faire un tri sur un fichier contenant les id et l'ip des utilisateurs.

je m'adresse à vous pour savoir comment il serait possible de trier un fichier qui se compose comme ceci

23455 192.168.0.15
23456 192.168.0.1
23456 192.168.0.2

pour faire en sorte que ca donne ceci :

23455 192.168.0.15
23456 192.168.0.1 192.168.0.2

en gros le tri se ferait sur la première chaine de charactère les informations suivantes seraient ainsi mise à la suite de l'occurence restante.

je me suis tourné vers les fonctions sort et uniqmais je connais peu les paramètres et n'obtiens pas le resultat voulu.

si je trouve une solution je la poste dès que c'est validé

Merci d'avance

8 réponses

  1. Contributeur
    hello
    $ cat a2
    23455 192.168.0.15
    23456 192.168.0.1
    23456 192.168.0.2
    $ 
    $ sort -n -k 1,2 a2 | awk '{x[$1]=x[$1] " " $2} ; END{for(n in x)print n, x[n]}'
    23455  192.168.0.15
    23456  192.168.0.1 192.168.0.2
    $ 
    2
    1. Contributeur
      voila
      {x[$1]=x[$1] " " $2}
      pour chaque ligne, on stocke dans un tableau x indexé par le champ 1 l'adresse IP, que l'on ajoute aux précédentes
      
      END{for(n in x)print n, x[n]}
      à la fin, on imprime le tableau, n étant la valeur de début de ligne, x[n] les adresses IP pour une même valeur de début de ligne
      1
      1. Merci beaucoup ca marche niquel,

        par conte si je pouvais avoir une explication a partir du awk ca serait vraiment top... ca me permettrait de me mettre en tête un peu mieux cette utilisation de cette fonction.
        0
        1. Bonjour, je suis nouveau sur ce site et novice en Unix.

          comment faire si les fichiers n'avaient pas de sépérateur (dans le cas ou pas de blanc)?

          23455192.168.0.15
          23456192.168.0.1 192.168.0.2

          Merci d'avance.
          0
          1. Contributeur
            par ex. insérer un espace
            $ cat a1 
            23455192.168.0.15 
            23456192.168.0.1 192.168.0.2 
            $  
            $ sed 's/^...../& /' a1 
            23455 192.168.0.15 
            23456 192.168.0.1 192.168.0.2 
            $ 
            ou
            $ gawk 'BEGIN{FIELDWIDTHS="5 32"} {print $1, $2}' a1
            23455 192.168.0.15
            23456 192.168.0.1 192.168.0.2
            $ 
            0
            1. Merci bcp Dubcek !
              si j'ai d'autres questions sur Unix , pourrais-je encore vous les posés ?
              0
              1. Contributeur
                bien sûr
                il y a aussi le forum Linux/Unix
                0
            2. merci d'avance de me fournir le lien du forum Linux/Unix
              0
              1. Modérateur
                Salut,

                Là ;-))
                0
            3. Contributeur
              dans la liste des forums
              0