Traitement de texte avec awk ou sed
romzzzz
-
romzzzz -
romzzzz -
Bonjour,
Je cherche à récupérer plusieurs valeurs dans des fichiers texte. Ces fichiers ont à peu près tous la même structure qui ressemble à une succession de champs ANOLOG identiques à celui-ci :
=== ANOLOG ========================================= 23/11/2009 08:37:21 =
codano non significatif CODANO=-1
CR=0 CHA=B
CODCOMP=1850
LOC_DETECT : T_PROC=20 - N_PROC=449 - N_DET=5
ENT_DET=2 - SER_FCT=20 ID_FCT=220
REFDET=0
ENT_DIS=0 -
....
===ANOLOG===============
Le but est d'enregistrer dans une variable (pourquoi pas un tableau une ligne) la valeur des champs CODCOMP, T_PROC, N_PROC, N_DET, ENT_DET, SER_FCT, ID_FCT.
J'ai déjà réussi à récupérer ceux de la ligne LOC_DETECT mais seulement après avoir modifié le fichier en faisant des grep / paste et ensuite en utilisant sed. J'aimerai le faire directement avec awk par exemple.
Pour info j'écris un programme en shell script !
Des idées ?
Merci d'avance !
Je cherche à récupérer plusieurs valeurs dans des fichiers texte. Ces fichiers ont à peu près tous la même structure qui ressemble à une succession de champs ANOLOG identiques à celui-ci :
=== ANOLOG ========================================= 23/11/2009 08:37:21 =
codano non significatif CODANO=-1
CR=0 CHA=B
CODCOMP=1850
LOC_DETECT : T_PROC=20 - N_PROC=449 - N_DET=5
ENT_DET=2 - SER_FCT=20 ID_FCT=220
REFDET=0
ENT_DIS=0 -
....
===ANOLOG===============
Le but est d'enregistrer dans une variable (pourquoi pas un tableau une ligne) la valeur des champs CODCOMP, T_PROC, N_PROC, N_DET, ENT_DET, SER_FCT, ID_FCT.
J'ai déjà réussi à récupérer ceux de la ligne LOC_DETECT mais seulement après avoir modifié le fichier en faisant des grep / paste et ensuite en utilisant sed. J'aimerai le faire directement avec awk par exemple.
Pour info j'écris un programme en shell script !
Des idées ?
Merci d'avance !
A voir également:
- Traitement de texte avec awk ou sed
- Traitement de texte gratuit - Guide
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Ce traitement de texte gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Traitement de texte gratuit open office - Télécharger - Suite bureautique
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
4 réponses
Hello,
Moi j'aurais fait comme ça, par exemple pour REFDET :
for REFDETline in 'grep REFDET le_fichier'; do
monREFDET='echo $REFDETline | awk -F"=" '{print $2}''
allREFDET='echo $allREFDET $monREFDET'
done
Et donc dans $allREFDET, tu obtiens la liste de tous les REFDET du fichier, séparés par un espace...
Ça te convient ?
Y'a surement mieux hun...
Cordialement, M.
Moi j'aurais fait comme ça, par exemple pour REFDET :
for REFDETline in 'grep REFDET le_fichier'; do
monREFDET='echo $REFDETline | awk -F"=" '{print $2}''
allREFDET='echo $allREFDET $monREFDET'
done
Et donc dans $allREFDET, tu obtiens la liste de tous les REFDET du fichier, séparés par un espace...
Ça te convient ?
Y'a surement mieux hun...
Cordialement, M.
Salut,
;-))
$ cat plop === ANOLOG ========================================= 23/11/2009 08:37:21 = codano non significatif CODANO=-1 CR=0 CHA=B CODCOMP=1850 LOC_DETECT : T_PROC=20 - N_PROC=449 - N_DET=5 ENT_DET=2 - SER_FCT=20 ID_FCT=220 REFDET=0 ENT_DIS=0 - .... $ sed -n '/CODCOMP/{N;N; s/\n/ /g; s/[^[:digit:] ]//g;s/ */,/gp}' plop 1850,20,449,5,2,20,220 $
;-))
Merci, cela fonctionne (sauf qu'il faut des back quotes à chaque fois :) ) !
Mais le but (je n'ai pas été assez précis) c'est de former pour chaque champ ANOLOG du fichier un tableau 1 dimension de ce genre :
ano1(CODCOMP, T_PROC, N_PROC, N_DET, ENT_DET, SER_FCT, ID_FCT)
ano2(CODCOMP, T_PROC, N_PROC, N_DET, ENT_DET, SER_FCT, ID_FCT)
ano3(...
etc.
Je vais travailler dans cette voie, merci.
Mais le but (je n'ai pas été assez précis) c'est de former pour chaque champ ANOLOG du fichier un tableau 1 dimension de ce genre :
ano1(CODCOMP, T_PROC, N_PROC, N_DET, ENT_DET, SER_FCT, ID_FCT)
ano2(CODCOMP, T_PROC, N_PROC, N_DET, ENT_DET, SER_FCT, ID_FCT)
ano3(...
etc.
Je vais travailler dans cette voie, merci.
Ok mais j'ai un "command garbled" et je doute que cela marche sur le fichier qui contient environ une centaine de champ ANOLOG !
En tout cas merci jipicy, ca m'avance déjà pas mal !
En tout cas merci jipicy, ca m'avance déjà pas mal !
Oui avec sed :
~/Essais>bash -x essai2.sh
+ read -p 'Entrez le nom du fichier de traces : ' nomfichier
Entrez le nom du fichier de traces : Anologs.doc
+ echo -e 'Lecture des champs du fichier Anologs.doc\n'
Lecture des champs du fichier Anologs.doc
+ sed -n '/CODCOMP/{N;N; s/\n/ /g; s/[^[:digit:] ]//g;s/ */,/g;s/.*/(&)/p}' Anologs.doc
sed: command garbled: /CODCOMP/{N;N; s/\n/ /g; s/[^[:digit:] ]//g;s/ */,/g;s/.*/(&)/p}
~/Essais>bash -x essai2.sh
+ read -p 'Entrez le nom du fichier de traces : ' nomfichier
Entrez le nom du fichier de traces : Anologs.doc
+ echo -e 'Lecture des champs du fichier Anologs.doc\n'
Lecture des champs du fichier Anologs.doc
+ sed -n '/CODCOMP/{N;N; s/\n/ /g; s/[^[:digit:] ]//g;s/ */,/g;s/.*/(&)/p}' Anologs.doc
sed: command garbled: /CODCOMP/{N;N; s/\n/ /g; s/[^[:digit:] ]//g;s/ */,/g;s/.*/(&)/p}