URL: https://linuxfr.org/forums/programmation-shell/posts/aide-avec-awk Title: aide avec awk Authors: redgepower Date: 2006年03月01日T22:38:31+01:00 Tags: Score: 0 Bonsoir tout le monde! J'ai un probleme pour implémenter mon script; vous pouvez vous en doutez en fait :) Je m'explique, en précisant que je n'ai jamais fait de script shell jusqu'à aujourd'hui, mais j'en ai besoin pour mon boulot :( J'ai un tableau dans un fichier texte "sacinfo.txt" de 13 colonnes, avec + de 5000 lignes. Chaque colonne est séparée par une tabulation, on obtient un truc du style: 040414_230739 12.200000 71.669998 -7.747000 2004 105 23 12 26.125000 GUA 27.489021 -286.184998 10801.168513 pour une des lignes. (Il y a une double tabulation entre 26.125 et GUA) Je souhaite que mon script lise pour chaque ligne les variables 2 et 12 (en l'occurence 12.2 et -286.184998). Ensuite je veux qu'il appelle un programme et passe en parametre de ce programme mes deux variables. Le programme s'appelle ttimes et s'execute dans le shell. Je montre ici juste un extrait de ce que affiche ttimes, et de ce qui m'interesse: Enter delta: delta # code time(s) (min s) dT/dD dT/dh d2T/dD2 60.00 1 P 607.81 10 7.81 6.8772 -1.61E-01 -4.20E-03 2 pP 608.77 10 8.77 6.8787 1.61E-01 -4.20E-03 Je ne sais pas si une fois posté le message formattera correctement mon texte, mais on a ici les lignes 35, 36, 37 et 38. Ce qui m'interesse est le premier nombre après P: 607.81. Enfin je veux qu'il recupère un des résultats du programme ttimes, pour l'ajouter dans une nouvelle colonne (soit une 14e colonne) dans mon fichier "sacinfo.txt". Difficile? Du moins pour moi qui débute oui, mais j'ai réussi à réaliser certaines parties. Cependant dès que je relie le tout, mon script me met une erreur dès la ligne deux. Voici mon script: #!/bin/sh awk -F "\t" '{if(2ドル=="Profondeur") next; else ttimes << EOF >ttpsav P 2ドル 12ドル -1 -1 EOF; awk 'NR==37 {print 4ドル>}'~/ttpsav>~/ttp}'~/sacinfo.txt Je l'explique: en premiere ligne, j'échappe la premiere ligne de mon tableau dans sacinfo qui contient le titre des colonnes (a priori ça marche). Ensuite, j'invoque ttimes, je rentre les commandes (elles sont bonnes), et j'enregistre le résultat dans ttpsav. Puis je me place en 37e ligne de ttpsav, je récupere la 4e variable (c'est la bonne) et je l'enregistre dans un fichier nommé ttp. Je ne gere pas ici l'ecriture dans la 14e colonne du fichier sacinfo.txt car ce serait une cerise sur le gateau, si j'ai le gateau déjà je serais content! Qu'en pensez vous? ai je le droit d'invoquer deux fois awk l'un dans l'autre? Mon erreur m'indique que ttpsav est introuvable. Mais meme si ce probleme se resoud je ne sais pas si mon script est correct. Je ne suis plus au boulot là (heureusement remarque) donc je peux pas le lancer. Merci si vous prennez le temps de tout lire, j'ai été le plus explicite possible! En esperant qu'il existe une solution, sinon je devrais le faire en C mais je ne sais pas comment on invoque un programme shell dans un programme c :( :p Bonne soirée!