AWK : Analyse d'un fichier log avec pattern
Bonjour,
Je fais à nouveau appel à vos services pour l'écriture d'un script shell qui permettra de récupérer certaines informations issues d'un fichier (dont je ne maitrise pas la structure lorsqu'il est mis à disposition) avec en entrée 2 variables permettant d'identifier la bonne ligne.
La structure du fichier est la suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
PART01;09/11/2017;VGPA$BAS; 5221068; 3258186;62; ^@^@^@^@^@^@^@
PART01;09/11/2017;VGPEFLUX; 146160; 142760;98; ^@^@^@^@^@^@^@
PART01;09/11/2017;VGPADBAS; 1234218; 1003108;81; ^@^@^@^@^@^@^@
PART01;09/11/2017;VGPUNL ; 1875720; 1482572;79; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGBOMNUR; 406000; 327503;81; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGBOMRUR; 1063720; 857238;81; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGPEDADS; 186760; 186145;>>; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGPEFLUX; 48720; 14959;31; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGPEINST; 113680; 100291;88; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGPUNL ; 170520; 170156;>>; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGPERSVE; 3320956; 3316008;>>; ^@^@^@^@^@^@^@
PART02;09/11/2017;VGPESAVE; 730800; 596829;82; ^@^@^@^@^@^@^@
PART03;09/11/2017;VGPEUSER; 73080; 17711;24; ^@^@^@^@^@^@^@
PART03;09/11/2017;VGPEWORK; 138040; 124329;90; ^@^@^@^@^@^@^@
PART03;09/11/2017;VGPPCTRL; 267959; 92553;35; ^@^@^@^@^@^@^@
PART03;09/11/2017;VGPEFLUX; 438472; 217562;50; ^@^@^@^@^@^@^@
PART03;09/11/2017;VGPUNL ; 3507696; 3503934;>>; ^@^@^@^@^@^@^@
PART03;09/11/2017;VGPVTS ;---------;---------;--; ^@^@^@^@^@^@^@
PART03;09/11/2017;VGPVTS9 ;---------;---------;--; ^@^@^@^@^@^@^@ |
Mes critères permettant d'identifier la bonne ligne se font sur la colonne et 1 et 3.
J'ai commencé à traiter l'identification de la ligne à l'aide de la commande AWK mais je suis confronté à un problème sur les champs contenant des blancs en fin de chaîne sur la troisième colonnes.
Commande d'identification de la ligne du fichier :
Code:
1 2
|
LIGNE=$(awk -F";" -v SERVEUR=$PART -v SERVICE=$STOG '{IGNORECASE=1} $1==SERVEUR && $3==SERVICE {print $0}' $FILE) |
Lorsqu'il n'y a pas de blanc en fin de chaine sur la troisième colonne, je récupère bien les informations :
Code:
1 2 3 4 5 6 7 8 9
|
PART="PART03"
STOG="VGPPCTRL"
FILE="/tmp/FICSTORAGE"
LIGNE=$(awk -F";" -v SERVEUR=$PART -v SERVICE=$STOG '{IGNORECASE=1} $1==SERVEUR && $3==SERVICE {print $0}' $FILE)
echo "LIGNE ==> $LIGNE"
LIGNE ==> PART03;09/11/2017;VGPPCTRL; 267959; 92553;35; |
Mais lorsque j'effectue la même commande avec des blancs dans le champ, je ne récupère aucune valeur !
Code:
1 2 3 4 5 6 7 8 9
|
PART="PART03"
STO="VGPUNL"
FILE="/tmp/FICSTORAGE"
LIGNE=$(awk -F";" -v SERVEUR=$PART -v SERVICE=$STOG '{IGNORECASE=1} $1==SERVEUR && $3==SERVICE {print $0}' $FILE)
echo "LIGNE ==> $LIGNE"
LIGNE ==> |
Auriez-vous une idée pour ne pas tenir compte des blancs lors de ma recherche ?
Vous remerciant par avance.