Awk et variabilisation

Résolu/Fermé
hexomon Messages postés 60 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 21 décembre 2022 - Modifié par hexomon le 23/05/2011 à 16:18
hexomon Messages postés 60 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 21 décembre 2022 - 24 mai 2011 à 10:27
Bonjour,

J'ai un petit problème en shell sur AIX :)

Je dois passer un awk dans un script dont les variables de champ attachées au print doivent être variabilisées. Le but est le suivant: le script devra chercher dans un fichier quel est le champ voulu (exemple: le 8), et un awk devra être généré en conséquence pour faire la recherche dans le fichier voulu, c'est à dire: awk '{print $8}' Fichier



Je n'arrive pas à obtenir de résultats....

Des exemples concrets :

hh=\$8
Commande=$(awk '{print $hh}' Fichier)
$Commande

ca donne:
+ hh=$8
+ + awk {print $hh} Fichier
awk : 0602-562 La zone $() n'est pas correcte.
Le numéro de la ligne de saisie est 1.Le fichier est Fichier.
Le numéro de la ligne source est 1.
Commande=


Ou encore, en ajoutant un echo dans la variable Commande:
hh=\$8
Commande=$(echo "awk '{print $hh}' Fichier")
$Commande

Ca donne:
+ hh=$8
+ + echo awk '{print $8}' Fichier
Commande=awk '{print $8}' Fichier
+ awk '{print $8}' Fichier
Erreur de syntaxeLa ligne source est 1.
Le contexte de l'erreur est
>>> ' <<<
awk : 0602-540 Il manque un caractère }.
awk : 0602-500 QuitterLa ligne source est 1.


Tout ce que je veux, c'est que mon 8 (dans l'exemple) soit variabilisé dans le print d'un awk, lui-même variabilisé pour être lance comme une commande. Ainsi, je pourrai ensuite créer un awk personnalisé en fonction du type de recherche voulu, sans passer par un fichier intermédiaire (c'est ce que je veux éviter).

Si ça vous parle, j'accueillerai avec joie vos propositions :)

Merci d'avance et bonne journée,

Hexomon

1 réponse

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
23 mai 2011 à 18:11

johand@osiris:~/tmp$ v='$8'
johand@osiris:~/tmp$ comd='awk "{print $v}"'
johand@osiris:~/tmp$ eval $comd 
1 2 3 4 5 6 7 8 9
8
aa zz ee

a z e r t y u i o p q s
i

0
hexomon Messages postés 60 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 21 décembre 2022 1
24 mai 2011 à 10:27
Merci beaucoup :))))))
0