[Unix] tri de fichier - special

Résolu
Plopiplop -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

8 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
Plopiplop
 
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
Med
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
Med
 
Merci bcp Dubcek !
si j'ai d'autres questions sur Unix , pourrais-je encore vous les posés ?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
bien sûr
il y a aussi le forum Linux/Unix
0
Med
 
merci d'avance de me fournir le lien du forum Linux/Unix
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

;-))
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
dans la liste des forums
0