Traitement de texte avec awk ou sed

Fermé
romzzzz - Modifié par romzzzz le 27/07/2010 à 11:59
 romzzzz - 27 juil. 2010 à 16:08
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 !



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.
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 897
27 juil. 2010 à 14:10
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
$

;-))
0
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.
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 897
27 juil. 2010 à 14:40
Il faut des back quotes où ?

$ sed -n '/CODCOMP/{N;N; s/\n/ /g; s/[^[:digit:] ]//g;s/  */,/g;s/.*/(&)/p}' plop 
(1850,20,449,5,2,20,220)
0
Non je parlais du message de swed.
0
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 !
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 897
27 juil. 2010 à 14:58
Ok mais j'ai un "command garbled"
Avec "sed" ?
0
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}
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 897
27 juil. 2010 à 15:15
Sur quel système tu es ?
Quelle version de sed ?
0
Je suis sur une station de travail Sun avec Solaris 5.10.
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 897
27 juil. 2010 à 15:44
Et la version de sed ?
0