Partage
  • Partager sur Facebook
  • Partager sur Twitter

Redirections dans un script awk

awk

    28 octobre 2022 à 20:06:41

    Bonjour, 

    J'ai écris un script en awk qui me permet d'extraire des données d'un fichier texte, et mettre le résultat dans un fichier de sortie. 

    Exemple : 

    ./script fichierEntree.txt > fichierSortie.txt 

    Je souhaiterais rajouter directement dans le code, les fichiers d'entrée/sorite et ainsi pouvoir exécuter mon script sans mettre dans la ligne de commande les deux fichiers. 

    Merci 

    -
    Edité par Elinux 2 novembre 2022 à 17:54:46

    • Partager sur Facebook
    • Partager sur Twitter
      29 octobre 2022 à 13:54:58

      salut,

      pour la sortie, les redirections fonctionnent dans awk.

      pour les entrées, il faut jouer avec ARGV, et ARGC pour être cohérent.

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        2 novembre 2022 à 16:59:59

        Hello, 

        Merci pour ta réponse.

        Pour l'entrée : je ne sais pas comment introduire ARGV et ARGC dans mon code ! Je ne trouve rien qui répond à ma demande.  

        Mon souhait est d'exécuter mon script sans mettre de fichiers dans ma commande ! tout mettre dans le code et juste exécuter ./script

        Pour la sortie : je ne doute pas que les redirections fonctionnent dans awk, mais je n'ai pas réussi à le faire, c'est pour cela que pose la question. 

        D'autres indications ? 

        Merci par avance 

        • Partager sur Facebook
        • Partager sur Twitter
          2 novembre 2022 à 17:56:16

          quel est ton code ?
          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            2 novembre 2022 à 18:49:51

            Hello, 

            Oui bien sûr, alors le but de l'exercice était d'extraire d'un fichier texte d'entrée, des données spécifiques qu'on va mettre dans un autre fichier que j'ai appelé fichier de sortie, après avoir fait ça, je cherche à tout mettre dans mon script. 

            Fichier texte d'entrée (fichierEntree.txt) : 

            [[ Groupe 1 ]]
            name = "Eleve"
            classe = "1"
             
            [[ Groupe 2 ]]
            name = "Eleve_2"
            classe = "2"
             
            [[ Groupe 3 ]]
            name = "Eleve_3"
            classe = "2"
             
            [[ Groupe 4 ]]
            name = "Eleve_4"
            classe = "4"

            script : 

            #!/usr/bin/awk -f
            
            function texte()
            {
                    if (gr==1) print txt;
                    txt="";
            }
            
            /classe = "2"/{
                    gr=1;
            }
            
            /^\[\[ Groupe [0-9]+ ]]$/{
                    texte();
                    gr=0;
            }
            
            {
                    if (txt!="") txt=txt"\n"
                    txt=txt""$0
            }
            
            END{
                    texte();
            }

            Résultat dans le fichier de sortie après avoir exécuté la commande : ./script fichierEntree.txt > fichierSortie.txt
            fichierSortie.txt : 

            [[ Groupe 2 ]]                                                                                                         
            name = "Eleve_2"                                                                                                      
            classe = "2"                                                                                                           
             
            [[ Groupe 3 ]]                                                                                                         
            name = "Eleve_3"
            classe = "2"

            -
            Edité par Elinux 2 novembre 2022 à 18:51:29

            • Partager sur Facebook
            • Partager sur Twitter
              2 novembre 2022 à 19:26:31

              voici un exemple :
              $ awk 'BEGIN{ARGV[ARGC++]="/chemin/vers/fichierEntree"}{print $0 >"/chemin/vers/fichierSortie"}'

              ARGV[1] parce que ARGV[0] doit rester awk.

              démonstration :

              $ awk 'BEGIN{for(i=0;i<ARGC;i++)print "ARGV["i"] = "ARGV[i]}'
              ARGV[0] = awk
              $

              -
              Edité par dantonq 2 novembre 2022 à 19:29:17

              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                3 novembre 2022 à 14:13:12

                Désolé mais je n'arrive pas à saisir ! 

                je ne vois pas le rapport entre les deux codes (exemple et démonstration). J'ai essayé d'intégrer l'exemple dans mon code mais je reçois cette erreur : 

                scriptExtractData]$ ./script.awk
                awk: ./script.awk:2: awk 'BEGIN{ARGV[ARGC++]="fichierEntree.txt"}{print $0 >"test1.txt"}'
                awk: ./script.awk:2:     ^ invalid char ''' in expression
                awk: ./script.awk:2: awk 'BEGIN{ARGV[ARGC++]="fichierEntree.txt"}{print $0 >"test1.txt"}'
                awk: ./script.awk:2:     ^ syntax error

                Je n'ai pas mis de chemin car mon fichier d'entrée est dans le même dossier que le script. 

                Merci 

                -
                Edité par Elinux 3 novembre 2022 à 14:23:23

                • Partager sur Facebook
                • Partager sur Twitter
                  5 novembre 2022 à 12:24:14

                  Les lignes donnée par dantonq son à utiliser en ligne de commande ou un script bash. Le script awk se trouve dans les '.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Redirections dans un script awk

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown