Problème d'extraction d'infos dans un fichier

Résolu/Fermé
rookie_man - 8 avril 2009 à 16:11
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 8 avril 2009 à 18:30
Bonjour,

J'ai un petit souci avec un script Shell. J'ai essayé avec sed et grep de le résoudre, mais jusque maintenant sans succès. J'ai plusieurs fichiers que l'on appelera ping1.txt, ping2.txt, ..., pingn.txt chacun contenant les mêmes lignes suivantes (avec les chiffres qui changent bien évidemment :D):

Packets: Sent = 20, Received = 19, Lost = 1 (5% loss),
Approximate round trip times in milli-seconds:
Minimum = 4.10ms, Maximum = 11.79ms, Average = 9.72ms, Jitter Statistical = 1.49ms

De ce fichier, je voudrais récupérer ce qui est avant le % sur la première ligne (cad 5 ici), puis 4.10ms, 11.79ms, 9.72ms et 1.49ms dans la dernière ligne. J'arrive avec grep à récupérer la dernière ligne puis à effacer ce qui me gêne à l'aide de sed.
Le problème est que je souhaite récupérer la valeur "5%" et les autres précédemment citées et les écrire dans une même ligne dans un autre fichier. En fait, j'aurai beaucoup de fichiers similaires à traiter, d'où l'intérêt de ne le mettre que sur une seule ligne, afin de récupérer un fichier simple à étudier ensuite.

Quelqu'un aurait-il une idée pour ça svp? Je galère depuis quelques temps déjà...
Je vous remercie par avance pour votre aide.
Bonne journée!
A voir également:

4 réponses

Par exemple, j'ai utilisé grep comme suit:

grep "loss" *ping* > "truc.txt"

Cette commande va m'afficher dans le fichier truc.txt toutes les lignes contenant le mot "loss", en l'occurence ici:
Packets: Sent = 20, Received = 19, Lost = 1 (5% loss),

De même, la même commande avec "Minimum" comme mot-clé me donnera la troisième ligne avec grep.

Le problème est que je souhaite récupérer le chiffre précédent loss avec les infos sur le min et le reste et ce dans la même ligne. Ainsi, j'aurai un fichier tout propre qui contiendrai pour un même fichier ping les infos que je souhaite...Je pense que ça doit être possible vu qu'il y a des flags entourant les termes que je souhaite...

En espérant être clair et que vous puissiez m'aider.
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 897
8 avril 2009 à 16:54
Salut,
[tmpfs]$ cat plop
Packets: Sent = 20, Received = 19, Lost = 1 (5% loss),
Approximate round trip times in milli-seconds:
Minimum = 4.10ms, Maximum = 11.79ms, Average = 9.72ms, Jitter Statistical = 1.49ms

[tmpfs]$ cat plop2
Packets: Sent = 20, Received = 19, Lost = 1 (10% loss),
Approximate round trip times in milli-seconds:
Minimum = 5.20ms, Maximum = 22.79ms, Average = 4.72ms, Jitter Statistical = 3.49ms

[tmpfs]$ cat foo.sed

#n

1 s/.*(\(.*%\).*/\1/
h
n
n
s/[^=]*= \([^,]*\),[^=]*= \([^,]*\),[^=]*= \([^,]*\),[^=]*= \([^,]*\)/\1 \2 \3 \4/
H
g
s/\n/ /
p

[tmpfs]$ sed  -s -f foo.sed plop* > final

[tmpfs]$ cat final
5% 4.10ms 11.79ms 9.72ms 1.49ms
10% 5.20ms 22.79ms 4.72ms 3.49ms

[tmpfs]$
;-))
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
8 avril 2009 à 17:42
hello
un p'tit awk

$ cat file
Packets: Sent = 20, Received = 19, Lost = 1 (5% loss),
Approximate round trip times in milli-seconds:
Minimum = 4.10ms, Maximum = 11.79ms, Average = 9.72ms, Jitter Statistical = 1.49ms

Packets: Sent = 20, Received = 19, Lost = 1 (10% loss),
Approximate round trip times in milli-seconds:
Minimum = 5.20ms, Maximum = 22.79ms, Average = 4.72ms, Jitter Statistical = 3.49ms

$ awk 'BEGIN {FS="[(%=,]"} /^Packet/ {loss=$7} /^Minimum/ {print loss "%",$2, $4, $6, $8}' < file
5% 4.10ms 11.79ms 9.72ms 1.49ms
10% 5.20ms 22.79ms 4.72ms 3.49ms
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 897
8 avril 2009 à 17:54
Salut,

Je me doutais qu'il y avait effectivement plus simple avec awk, mais bon je maitrise mieux sed ;-))


PS. T'as fini de me taper mes fichiers faignasse ;-)))
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
8 avril 2009 à 18:28
j'optimise les synergies grâce à la convivialité du copier/coller :-)
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 897 > dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024
8 avril 2009 à 18:30
Encore un Perlien en devenir ;-))
0
Ok!!!
Merci beaucoup à tous les deux.
Les deux méthodes sont bien compliquées à comprendre, mais elles font ce que je veux donc c'est nickel!
Je vais essayer de regarder ça avec plus d'attention!!

Merci encore!!
Et bonne soirée à vous!! ;-)
0