Lecture de fichier sous unix
LEBENATOR
-
dubcek Messages postés 18786 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18786 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous et merci du temps que vous allez consacrer à me répondre !
J'ai ce bout de code :
donc voilà, je comprends pas pourquoi ces variables deviennent vides après le while, a savoir que dans le while les valeurs sont les bonnes
aucun message d'erreur
J'ai ce bout de code :
COUNT=0
SEUIL=8
cat $FILE | while read line
do
#récupère la valeur numérique a la position $3
COUNT='echo "$line" | awk '{print $3}''
echo "$COUNT"
if [ $COUNT > $SEUIL ]
then
echo "Anormal error on : $line"
((STATUS=STATUS+1))
echo "$STATUS"
fi
done
echo "$COUNT" #n'a plus de valeur à l'issu du while
echo "$STATUS" #n'a plus de valeur à l'issu du while
donc voilà, je comprends pas pourquoi ces variables deviennent vides après le while, a savoir que dans le while les valeurs sont les bonnes
aucun message d'erreur
A voir également:
- Lecture de fichier sous unix
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
6 réponses
En fin de compte, le problème vient du "pipe" (cat $FILE_VISUAL_REPORT | while read line), qui s'exécute dans un processus fils et donc indépendamment du parent :-(
Essaie comme ça
Essaie comme ça
#!/bin/bash
COUNT=0
SEUIL=8
#--- temporary files
FILE_REPORT="/log/report.txt"
FILE_VISUAL_REPORT="log/visual_report.txt"
FILE_TEMP="/tmp/script_report_tmp.txt"
FILE_TEMP2="/tmp/script_report_tmp2.txt"
#--------------------------------------------------
#--------------------------------------------------
#--- Begin
echo "*************" > $FILE_VISUAL_REPORT
echo "Global Report" >> $FILE_VISUAL_REPORT
echo "*************" >> $FILE_VISUAL_REPORT
awk '/>/ {split($0 $NF,v,"-->");err[v[2]]=0} ; /ERROR/ {err[v[2]]++;e[i++]=$NF} ; END{for (n in err)print n,err[n]}' $FILE_REPORT | sed "s/checking//" | awk '{if($NF>=8){print $1, $3, $NF, "Errors"}}' >> $FILE_VISUAL_REPORT
exec < ${FILE_VISUAL_REPORT}
# cat $FILE_VISUAL_REPORT | while read line
while read line
do
COUNT=$(echo "$line" | awk '{if($3>8){print $3}}')
echo "$COUNT"
if [ $COUNT -gt $SEUIL ]
then
echo "condition du count"
echo "Anormal error on : $line"
STATUS=$((STATUS + 1))
echo "$STATUS"
fi
done
echo "$COUNT"
echo "$STATUS"
if [ $STATUS -ne 0 ]
then
echo "condition du statut"
MODULESTATUS=ERROR
fi
echo "FIN"
#--------------------------------------------------
#--------------------------------------------------
#--- Clean
if [ -e $FILE_REPORT ]
then
rm $FILE_REPORT
fi
if [ -e $FILE_VISUAL_REPORT ]
then
rm $FILE_VISUAL_REPORT
fi
Salut,
Parce que ton script est plein d'erreur de syntaxe ;-(
En gras les choses à changer ;-\
Parce que ton script est plein d'erreur de syntaxe ;-(
En gras les choses à changer ;-\
COUNT=0
SEUIL=8
cat $FILE | while read line
do
#récupère la valeur numérique a la position $3
COUNT=$(echo "$line" | awk '{print $3}')
echo "$COUNT"
if [ $COUNT -gt $SEUIL ]
then
echo "Anormal error on : $line"
((STATUS+1))
echo "$STATUS"
fi
done
echo "$COUNT" #n'a plus de valeur à l'issu du while
echo "$STATUS" #n'a plus de valeur à l'issu du while
Merci jipicy
les changements ont été effectué et malgrès cela, il reste les mêmes erreurs + la variable STATUS qui à une valeur nulle dans la boucle while après son incrémentation.
apparation de ce message d'erreur :
script.sh: line 118: [: -gt: unary operator expected
les changements ont été effectué et malgrès cela, il reste les mêmes erreurs + la variable STATUS qui à une valeur nulle dans la boucle while après son incrémentation.
apparation de ce message d'erreur :
script.sh: line 118: [: -gt: unary operator expected
après le changement :
la valeur de STATUS change bien dans le while
sortie du while elle vaut 0
-> incompréhensible car j'ai d'autres scripts utilisant le même type d'analyse de fichiers de log et lorsque la variable change dans le while je peux m'en servir avec la valeur qu'elle a prise dans celui-ci, là je bloque !
la valeur de STATUS change bien dans le while
sortie du while elle vaut 0
-> incompréhensible car j'ai d'autres scripts utilisant le même type d'analyse de fichiers de log et lorsque la variable change dans le while je peux m'en servir avec la valeur qu'elle a prise dans celui-ci, là je bloque !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ca marche avec exec !
Par contre toujours un message d'erreur sur la première itération
-gt: unary operator expected et ce pour chaque ligne, le plus étonnant c'est que malgrès l'erreur il rentre bien dans la condition !
Maintenant reste à comprendre pourquoi ca fonctionne sans problème sur mes autres scripts alors que sur celui-ci je dois me pencher un peu plus sur ce problème de parent fils sans doute et il y aura peut etre des modifications a apporter à l'ensemble des scripts mis en place.
Merci beaucoup jipicy pour la qualité de tes réponses !
Par contre toujours un message d'erreur sur la première itération
-gt: unary operator expected et ce pour chaque ligne, le plus étonnant c'est que malgrès l'erreur il rentre bien dans la condition !
Maintenant reste à comprendre pourquoi ca fonctionne sans problème sur mes autres scripts alors que sur celui-ci je dois me pencher un peu plus sur ce problème de parent fils sans doute et il y aura peut etre des modifications a apporter à l'ensemble des scripts mis en place.
Merci beaucoup jipicy pour la qualité de tes réponses !
peut-être tes autres scripts utilisent
while read line
do
..
done < $FILE
plutot que
cat $FILE | while read line
do
..
done
while read line
do
..
done < $FILE
plutot que
cat $FILE | while read line
do
..
done