Extraire des valeurs d'un fichier

Fermé
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 - 5 févr. 2009 à 09:42
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 - 5 févr. 2009 à 12:43
Bonjour,

je fais un script pour recuperer les données d'un fichier.

le contenu de mon fichier ressemble à ça :
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 HTTP_GET 52454545@ N/A 200 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 notifresp_ind 52454545@ N/A 200 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 HTTP_GET 52454545@ N/A 202 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 notifresp_ind 52454545@ N/A 205 2 false N/A - - - 29 eri 21091

ce fichier contient des milliers de lignes comme ça.

Ce que je voudrais c'est extraire le nombre de fois où dans le fichier il y a dans une ligne HTTP_GET ou notifresp_ind et la valeur 200 ou 202. HTTP_GET et notifresp_ind se trouve à $7 et la valeur 200 ou 202 se trouve à $10.

Dans l'exemple du ci-dessus, le script devrait me retourner la 3.

Voilà ce que j'ai commencer à faire :

[code]
#!/bin/sh

if [ -f result ]
then
rm result
fi

while read line;
do
echo $line > temp
awk -F" " '{ if ((( $7 = "notifresp_ind" ) || ( $7 = "HTTP_GET" )) && (( $10 == "200") || ( $10 == "202"))) print $7
, $10 }' temp >> result
done < ding
awk 'END {print NR}' result
exit

/code

Seulement là j'ai l'impression qu'il me met plusieurs fois les mêmes valeurs.

Pouvez-vous me filer un coup de main ?

Merci beaucoup.

Cordialement,
A voir également:

5 réponses

Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
5 févr. 2009 à 09:57
je viens de modifier un peu le script :

sur cette ligne là j'ai mis "==" ou lieu de "="
awk -F" " '{ if ((( $7 = "notifresp_ind" ) || ( $7 = "HTTP_GET" )) && (( $10 == "200") || ( $10 == "202")))

Je lance et on vera si ça marche mais si vous avez des idées n'hésitez pas ! :)

Merci.

Cordialement,
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 895
5 févr. 2009 à 10:28
Salut,
 awk '$7 ~ /HTTP_GET/ || /notifresp_ind/ && $10 ~ /200/ || /202/ {print $7}' 
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
5 févr. 2009 à 10:53
Donc je fais un truc comme ça ?

#!/bin/sh

if [ -f result ]
then
rm result
fi

while read line;
do
echo $line > temp
awk '$7 ~ /HTTP_GET/ || /notifresp_ind/ && $10 ~ /200/ || /202/ {print $7}' temp >> result
done < ding
awk 'END {print NR}' result
exit

Donc là il me sortira dans le fichier result à chaque fois qu'il trouve dans le fichier ding $7 = HTTP_GET ou m_notifresp_ind et quand il trouve ça dans une ligne il vérifie si $10 est égal à 200 ou 202 c'est ça ?

Merci en tout cas je continue de chercher.

Cordialement,
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5 > Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011
5 févr. 2009 à 11:01
je viens d'essayer ce qui est au dessus et en fait il me retourne des lignes que je veux pas.

C'est ça dire que j'ai des lignes où j'ai à la place de m_notifresp_ind, j'ai m_notification_ind et en fait il me sort les lignes où ya m_notification_ind dedans

Ce que je souhaite c'est faire une sorte de (HTTP_GET || m_notifresp_ind) && ( 200 || 202 ) sur un fichier et mettre le résultat (donc le print $7) dans un fichier et après compter le nombre de ligne dans le fichier générer où ya les résultat.

J'espère avoir été clair :)

Merci.

Cordialement,
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 895
5 févr. 2009 à 11:11
Ben chez moi ça marche avec l'exemple de ton fichier :
jp@MDK:~/tmpfs ssh$ cat fich
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 HTTP_GET 52454545@ N/A 200 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 notifresp_ind 52454545@ N/A 200 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 HTTP_GET 52454545@ N/A 202 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.101.111.111 - +33600014541 notifresp_ind 52454545@ N/A 205 2 false N/A - - - 29 eri 21091

jp@MDK:~/tmpfs ssh$ awk '$7 ~ /HTTP_GET/ || /notifresp_ind/ && $10 ~ /200/ ||  /202/ {print NR,$7}' fich
1 HTTP_GET
2 notifresp_ind
3 HTTP_GET

jp@MDK:~/tmpfs ssh$
J'ai rajouté le numéro de ligne devant en sortie...

Peut être nous faudrait-il davantage de lignes (non sollicitées) dans le fichier pour faire les essais...
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
5 févr. 2009 à 11:39
Regarde le fichier ding par exemple :

wmmlb02: 2009-02-04 14:01:46,517 10.10.10.10 - +33010101010 HTTP_GET 9784304400@ N/A 200 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.10.10.10 - +33010101010 m_notifresp_ind 9784304400@ N/A 205 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.10.10.10 - +33010101010 m_notifresp_ind 9784304400@ N/A 207 2 false N/A - - - 10.10.10.10
wmmlb02: 2009-02-04 14:01:46,517 10.10.10.10 - +33010101010 m_notifresp_ind 9784304400@ N/A 203 2 false N/A - - - 29 eri 21091
wmmlb02: 2009-02-04 14:01:46,517 10.10.10.10 - +33010101010 m_notifresp_ind 9784304400@ N/A 202 2 false N/A - - - 29 eri 21091
wmmlb03: 2009-02-04 14:15:33,585 10.10.10.10 - +33010101010 m_notification_ind 6342238308@ N/A 202 0 false N/A - - - 26 eii +332348349743/TYPE=PLMN
wmmlb02: 2009-02-04 14:01:46,517 10.10.10.10 - +33010101010 HTTPsdfsdf_GET 9784304400@ N/A 200 2 false N/A - - - 29 eri 21091

Tu copie ces lignes dans un fichier et tu execute ton awk sur ce fichier et tu vera il te sort m_notification_ind
En tout cas moi il me le sort et je sais pas pourquoi.

Merci.

Cordialement,
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
5 févr. 2009 à 11:54
Et en fait dans ton awk :
awk '$7 ~ /HTTP_GET/ || /notifresp_ind/ && $10 ~ /200/ || /202/ {print NR,$7}' fich

si je fais ça :
awk '$7 ~ /HTTP_GET/ && $10 ~ /200/ || /202/ {print NR,$7}' fich

et bien ça me donne exactement la même chose :

machine@ssh$ awk '$7 ~ /HTTP_GET/ || /notifresp/ && $10 ~ /200/ || /202/ {print $7}' ding
HTTP_GET
m_notifresp_ind
m_notification_ind
machine@ssh$ awk '$7 ~ /HTTP_GET/ && $10 ~ /200/ || /202/ {print $7}' ding
HTTP_GET
m_notifresp_ind
m_notification_ind

Peut-être que ça pourras t'aider.

Merci pour votre aide.

Cordialement,
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 895
5 févr. 2009 à 12:17
Essaye ça :
 awk '$7 ~ /HTTP_GET/ || $7 ~ /notifresp_ind/ && $10 ~ /200/ || $10 ~ /202/ {print $7}'

0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
5 févr. 2009 à 12:19
Je viens d'essayer et voilà le résultat :

machine@ssh$ awk '$7 ~ /HTTP_GET/ || $7 ~ /notifresp_ind/ && $10 ~ /200/ || $10 ~ /202/ {print $7}' ding
HTTP_GET
m_notifresp_ind
m_notification_ind

Toujours le même problème on dirait.

Merci.

Cordialement,
0

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

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
5 févr. 2009 à 12:35
Et comme ça :
 awk '($7 ~ /HTTP_GET/ || $7 ~ /notifresp_ind/) && ($10 ~ /200/ || $10 ~ /202/) {print $7}' 
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
5 févr. 2009 à 12:43
Oué c'est bon ça ça marche ! youpi ! :)

Par contre il me retourne un nombre que j'avais déjà avant et qui était faux donc je ferme pas le sujet parce que je pense que je vais rajouter une condition et je posterai ce que je fais si ça marche.

Merci en tout cas.

Cordialement,
0