[Unix] tri de fichier - special

Résolu/Fermé
Plopiplop - 25 août 2010 à 13:05
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 7 oct. 2010 à 16:07
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
25 août 2010 à 15:09
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
25 août 2010 à 16:10
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
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
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
Modifié par dubcek le 7/10/2010 à 15:28
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
Merci bcp Dubcek !
si j'ai d'autres questions sur Unix , pourrais-je encore vous les posés ?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
7 oct. 2010 à 15:57
bien sûr
il y a aussi le forum Linux/Unix
0
merci d'avance de me fournir le lien du forum Linux/Unix
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
7 oct. 2010 à 16:04
Salut,

;-))
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
7 oct. 2010 à 16:07
dans la liste des forums
0