Problème d'extraction d'infos dans un fichier
Résolu
rookie_man
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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!
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:
- Problème d'extraction d'infos dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
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.
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.
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]$;-))
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
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