Extraire des valeurs d'un fichier
Maillon
Messages postés
157
Statut
Membre
-
Maillon Messages postés 157 Statut Membre -
Maillon Messages postés 157 Statut Membre -
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,
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:
- Extraire des valeurs d'un fichier
- Fichier bin - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
5 réponses
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,
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,
Salut,
awk '$7 ~ /HTTP_GET/ || /notifresp_ind/ && $10 ~ /200/ || /202/ {print $7}'
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,
#!/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,
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,
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,
Ben chez moi ça marche avec l'exemple de ton fichier :
Peut être nous faudrait-il davantage de lignes (non sollicitées) dans le fichier pour faire les essais...
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...
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,
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,
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,
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,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Et comme ça :
awk '($7 ~ /HTTP_GET/ || $7 ~ /notifresp_ind/) && ($10 ~ /200/ || $10 ~ /202/) {print $7}'