Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2921 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  manipulation de contenu de fichier avec awk

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

manipulation de contenu de fichier avec awk

n°725562
DE-SK
Posté le 05-09-2005 à 18:17:06  profilanswer
 

Bonjour
 
Etant pluôt débutant en script unix et malgré mes nombreux essais, je me heurte à un problème m'empêchant d'avancer dans mon développement :
 
J'ai un fichier tmp1 contenant un nombre variable de lignes (nous dirons 2 pour l'exemple) contenant chacune une chaine de 6 caractères :
ABCDEF
GHIJKL
Je souhaiterais créer à partir de cela un fichier tmp2 contenant :
VSRCABCDEFSITEDATE01
VSRCGHIJKLSITEDATE01
où :
V est la lettre "V"
SRC, SITE et DATE sont des variables définies antérieurement
 
j'ai essayé plusieurs commandes dont ces 2-là : ($DIR est déjà définie)
awk '{print "V"${SRC}$1${SITE}${DATE}"01"}' $DIR/tmp1 > $DIR/tmp2
et  
awk '{print "V"$SRC$1$SITE$DATE"01"}' $DIR/tmp1 > $DIR/tmp2
La 1ère se termine en erreur et la 2ème me génère le fichier tmp2 suivant :
VABCDEFABCDEFABCDEFABCDEF01
VGHIJKLGHIJKLGHIJKLGHIJKL01
mon problème est que je n'arrive pas à utiliser mes variables précédemment définies dans le "print" ...  :??:  
existe-t'il un moyen pour que ces variables soient interprétées correctement dans le "print" ou de contourner ce problème ?
 
Merci d'avance !


Message édité par DE-SK le 06-09-2005 à 12:40:33
mood
Publicité
Posté le 05-09-2005 à 18:17:06  profilanswer
 

n°725565
jlighty
Posté le 05-09-2005 à 18:22:04  profilanswer
 

il y a un chose qui ne va pas :
l'appel des variables SRC et SITE en effet tu rajoute un $ devant cela correspond alors au champ de la ligne n°SRC ou SITE.
Ex: si SRC=127.0.0.1 alors $SRC sera le champ "127.0.0.1" (plus exactement 1 ou 0 car ce n'est pas un nombre) -> ABCDEF
En d'autres termes, pas de $ avant la variable.


Message édité par jlighty le 05-09-2005 à 18:29:13
n°725790
DE-SK
Posté le 06-09-2005 à 12:44:03  profilanswer
 

Merci de la réponse ...
comme je l'ai dit avant, mes variables sont dans un fichier .ini que j'appelle par ". $DIR/INIT_TEMP.ini" en début du script ($DIR est définie dans le script lui-même)
je viens d'essayer les lignes :
awk '{print "V" (SRC) $1 (SITE) (DATE) "01" }' $DIR/tmp1 > $DIR/tmp2
et  
awk '{print "V" SRC $1 SITE DATE "01" }' $DIR/tmp1 > $DIR/tmp2
 
... malheureusement sans plus de succès ...
dans les 2 cas j'obtiens :
VABCDEF01
VGHIJKL01

n°725794
jlighty
Posté le 06-09-2005 à 13:00:41  profilanswer
 

Les variables SRC, SITE et DATE sont des variable d'environnement ? ou elles sont passées par la ligne de commande awk ?
si variable environnement -> ENVIRON[var]
sinon : ARGV

n°725866
DE-SK
Posté le 06-09-2005 à 14:55:15  profilanswer
 

ce sont des variables que je définie par un script INIT.ksh qui génère le INIT_TEMP.ini que j'appelle en début de script pour aller y chercher les variables.
 
étant un peu limité en temps, je vais abandonner cette voie car je viens de trouver un moyen de contournement en utlisant un dénombrement des lignes dans le fichier contenant les chaines de 6 caractères, puis je génère un fichier de "préfixes" et un fichier de "suffixes" et je concatène les 3 ... ce n'est peut-être pas la méthode la plus "propre" mais ça marche bien et c'est facilement évolutif ...  
Merci encore pour les réponses ;)

n°725943
HNO3
I can't use what I can't abuse
Posté le 06-09-2005 à 18:13:22  profilanswer
 

Si tu veux que le shell remplace tes variables d'environnement definie avant il ne faut pas mettre ta ligne awk entre simple quote ( ' ) mais entre double quote ( " )
 
Tu peux te passer de awk en faisant un truc du genre:
 
for i in $(cat tmp)
do
 echo V${SRC}${i}${DATE}01
done
 
Ou un truc du genre :D

n°726760
Le_Tolier
Hello IT ?
Posté le 08-09-2005 à 10:18:41  profilanswer
 

Sinon il me semble que pour appeler des vars exterieur a awk il faut faire un truc du genre : awk -v mavar ....


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
n°726764
jlighty
Posté le 08-09-2005 à 10:27:39  profilanswer
 

Oui on peut aussi utiliser les variables spécifiées par la ligne de commande
awk -v ma_variable=ma_valeur


Message édité par jlighty le 08-09-2005 à 10:27:54
n°727045
matafan
Posté le 09-09-2005 à 00:57:29  profilanswer
 

Oui, typiquement on fait awk -v TOTO=$TOTO '...'. Mettre le script awk entre double quotes, c'est generalemenent un mauvaise idee. En tout cas quand on ne sais pas trop ce qu'on fait. Et DE-SK n'as pas l'air de trop comprendre ce qu'il fait.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  manipulation de contenu de fichier avec awk

 

Sujets relatifs
mise a jour sinaptic , erreur sur le fichier udevFichier contigu
fichier batchType de fichier pour un driver mac os X
[shell] ajouter ligne en début de fichierCrée un curseur ???? ou Modifier un fichier pour faire un curseur???
curl, ftp et parametre des fichier ...changer de système de fichier
Résultat d'une commande dans un fichierSuivre le contenu d'un répertoire
Plus de sujets relatifs à : manipulation de contenu de fichier avec awk


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR