[shell] appel fonction shell perso dans awk? [Résolu/Fermé]

Signaler
-
 Morphea -
Bonjour,

Je développe actuellement un script shell (ksh) sous HP-UX.

Dans ce script, je définis un certain nombre de fonctions shell. Jusqu'ici tout va bien.

Dans la fonction principale, j'utilise un awk pour lire un fichier ligne par ligne et en extraire les différents champs.

Pour chacune des lignes lues (donc dans le corps de mon awk), il faudrait que j'appelle l'une de mes fonctions utilisateur en lui passant en paramètres les champs que le awk a lu.

Cela est-il possible?
Comment faire appel à une fonction shell utilisateur à l'intérieur d'un awk?
La commande system() n'a l'air de marcher qu'avec les fonctions shell "connues" (donc pas avec mes fonctions utilisateur, ou alors je me suis plantée dans la syntaxe...)

Ou alors y a-t-il une alternative au awk qui serait plus simple que ce que j'essaie de faire?

Merci d'avance pour l'aide que vous pourrez m'apporter!

3 réponses

Messages postés
29899
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
18 juin 2021
7 124
Pourquoi ne pas simplement faire un script shell qui appelle awk ?
Pour les alternatives, tu as python, perl, ruby...

Bonne chance
Pour python, perl, ruby, je vais éviter, je rame déjà assez avec le shell...

J'ai modifié mon script (qui est effectivement un script shell qui appelle awk...) pour que le awk ne prenne qu'une seule ligne au lieu du fichier tout entier, dans le but de sortir tout de suite du awk derrière pour pouvoir tranquillement appeler mes fonctions shell.

Mais là, un nouveau problème se pose: comment récupérer les champs parsés par awk à l'extérieur du awk?

Je l'ai déjà dit, mais je rame un peu en shell... Etant donné que tout ce que je veux faire est un simple parsing des lignes de mon fichier (champs séparés par un espace), est-ce qu'il n'existe pas une fonction shell autre que awk qui permet de faire ça, et de récupérer les différents champs dans des variables?
Hum, laissez tomber, je me suis dépatouillée avec un simple "cut" finalement...