Forum Programmation.autre Awk 2

Posté par  .
Étiquettes : aucune
0
28
juil.
2005
Bonjour,

j'ai des programmes awk que je dois faire tourner.
Pour cela j'utilise cygwin. Tout fonctionne bien.
Le probleme c'est que je dois apppliquer le meme programme a plusieurs fichiers textes ( 40 fichiers au total)
J'aimerai lancer mon programme sans avoir a taper chaque ligne sous cygwin.

existe-t-il un moyen de regrouper ces executions ?

Merci d'avance pour vos reponses !

Key
  • # la réponse est simple

    Posté par  . Évalué à 1.

    existe-t-il un moyen de regrouper ces executions ?

    -> OUI
    • [^] # Re: la réponse est simple

      Posté par  . Évalué à 3.

      Plus sérieusement, il existe certainement plusieurs solutions en fonction de ce que tu veux faire et de la façon dont tu le fais.

      Donc, comment exécutes-tu ton programme awk actuellement ?
      On va supposer que tu tapes "awk -f programme.awk fichier_à_traiter".

      Où sont tes fichiers à traiter :
      - tous les fichiers d'un répertoire donné ?
      - tous les fichiers pouvant correspondre à un masque ? (par exemple *.txt , */t*.csv, ...)
      - tu as la liste de ces fichiers dans un fichier ?

      Comment veux tu récupérer le résultat :
      - un fichier de sortie par fichier en entrée ?
      - un unique fichier de sortie ?

      Supposons donc que tu veux traiter tous les fichiers *.txt du répertoire courant avec ton programme awk contenu dans le fichier programme.awk et que tu veux un fichier de sortie par fichier d'entrée avec les noms *.out, tu peux faire (sous bash) :

      for f in *.txt ; do awk -f programme.awk "$f" >"${f/.txt$/.out}" ; done


      En fonction de tes besoins, il te reste à adapter ...

      A+
      JJD
  • # bash is your friend

    Posté par  . Évalué à 2.

    si tes fichiers sont dans le même répertoire,


    for i in *;
    do
    echo $i
    awk -f progfile $i
    done;


    en prime un petit tutorial sur bash http://www.c-sait.net/cours/scripts.php(...)
    • [^] # Re: bash is your friend

      Posté par  (site web personnel) . Évalué à 2.

      ou avec un bon vieux find avec l'option exec:
      find /vers/mes/fichiers -exec awk -f ton_programme_awk {} \;

      Les accolades remplacent le nom du fichier repéré par find. Tu peux aussi utiliser des options pour sélectionner tes fichiers (par exemple l'option -name "*.html" ne te trouvera que les fichiers html, qui seront ensuite traités par ton script awk.
  • # soluce beurk

    Posté par  . Évalué à 1.

    $ ls *mesFichiers | awk '{ system("awk -f monProg "$1) ; }'

    Ca marche ?
    Si oui, vive awk.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.