IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comment dans gawk créer un fichier .log avec une redirection ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Comment dans gawk créer un fichier .log avec une redirection ?
    Bonjour,

    Dans un script, j'utilise gawk selon ce schéma :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    gawk -N -F ';' -v var1=1.0  '
    {
        if CONDITION 
    	  {
    		printf("%12s", $1) 
    		printf(";")
    		printf("%8s", $3)
    		printf(";")
     
    		#etc . . .
     
    		printf ("\n")
    	}
    } ' ftmp8a1.csv > ftmp8a2.csv
    Ce schéma marche bien.

    Quand la condition "CONDITION" n'est pas vérifiée, je souhaiterais créer, en plus, un fichier d'anomalie en .log reprenant certains champs.
    Je n'y arrive pas !
    J'ai complété le code précédent, mais je n'arrive pas à obtenir un code correct.
    Code modifié avec "else" incorrect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    echo "TitreCol1;TitreCol2;TitreCol3;TitreCol4;TitreCol5" > f8a.csv
    gawk -N -F ';' -v var1=1.0  '
    {
        if CONDITION 
    	  {
    		printf("%12s", $1) 
    		printf(";")
    		printf("%8s", $3)
    		printf(";")
     
    		#etc . . .
     
    		printf ("\n")
    		}
        else
            {
                 echo "$10;$2;$5;$9;var1" >> f8a.log
    	}
     
    } ' ftmp8a1.csv > ftmp8a2.csv
    La redirection dans le "else" ne fonctionne pas.
    Peut-on faire autrement ? ou Qu'est-ce qui cloche ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Liamm Voir le message
    La redirection dans le "else" ne fonctionne pas.
    Bah oui, le langage "awk" est un langage "à part", utilisé par, pour et dans awk. Il n'a aucun rapport avec le shell et les syntaxes "shell" ne sont pas applicables. D'ailleurs tu ne t'étonnes pas d'utiliser "$3" dans awk sans te dire qu'en shell "$3" n'a pas la même signification.
    C'est comme si tu essayais de mettre des redirections ">" en C ou en Python...

    Citation Envoyé par Liamm Voir le message
    Peut-on faire autrement ?
    Passer par des fonctions IO internes awk => https://www.gnu.org/software/gawk/ma...Functions.html
    Dans le "else" tu ouvres un fichier et tu écris dedans.

    Ou alors tu crées deux awk, le premier qui traite le fichier avec la condition vérifiée et le second dédié à traiter les anomalies quand la condition n'est pas vérifiée.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    ce n'est pas la redirection qui ne fonctionne pas, c'est le echo ! ce n'est pas une commande awk.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ gawk 'BEGIN{
        print "foo" >>"/tmp/awk.log"
        print "bar" >>"/tmp/awk.log"
    }'
    $ cat /tmp/awk.log
    foo
    bar
    $
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut
    Merci,
    Pour conclure, voici le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    printf "TitreCol1;0TitreCol2;TitreCol3;TitreCol4;TitreCol5" > f8a.log
    printf "\n" >> f8a.log
     
    gawk -N -F ';' -v var1=1.0  '
    {
        if CONDITION 
    	  {
    		printf("%12s", $1) 
    		printf(";")
    		printf("%8s", $3)
    		printf(";")
     
    		#etc . . .
     
    		printf ("\n")
    		}
            else
                {
                printf $3        >> "f8a.log"   
                printf(";")      >> "f8a.log" 
                printf $2        >> "f8a.log"   
                printf(";")      >> "f8a.log" 
                printf $5        >> "f8a.log"   
                printf(";")      >> "f8a.log" 
                printf $9        >> "f8a.log"  
                printf(";")      >> "f8a.log" 
                printf var1      >> "f8a.log"  
    	    printf("\n")     >> "f8a.log"          
                }
     
    } ' ftmp8a1.csv > ftmp8a2.csv
     
     
    sort f8a.log -t";" -k2  > ftmp8a5.csv
    #
    #Édition des anomalies
    #
    pr -d -h "$0 . . . Anomalies \
    triées par valeurs croissantes\
     . . . . " -l 45 -e";"13 -c ftmp8a5.csv
    . . . que j'ai pu établir grâce à vos conseils.

    À noter:
    1- comme je trie le fichier .log en colonne 2 avec sa ligne de titre, j'ai dû rajouter 0 devant TitreCol2
    2- concernant ce point, peut-on trier un fichier qu'à partir de la ligne 2, pour ne pas trier les titres des colonnes se trouvant en ligne 1 ?
    3- dans la ligne de titre j'avais mis le caractère pourcentage % que j'ai dû retirer, car ça créait une erreur.
    4- Je n'ai pas réussi le codage en mettant des "print".

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    1- `comprends pas
    2- pas directement, il faut afficher la première ligne (head), puis trier le reste (tail)
    3- pas de message d'erreur, pas de solution envisageable
    4- idem
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    1- `comprends pas
    Pour que la ligne de titre soit toujours en premier même après le tri. Il trie sur colonne 2 donc il fait en sorte que le titre de la colonne 2 commence par 0.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Point 1 et 2, puisque tu utilises gawk, pourquoi tu ne tries pas avec lui ?

    PROCINFO["sorted_in"]
    If this element exists in PROCINFO, then its value controls the order in which array elements are traversed in for loops. Supported values are "@ind_str_asc", "@ind_num_asc", "@val_type_asc",
    "@val_str_asc", "@val_num_asc", "@ind_str_desc", "@ind_num_desc", "@val_type_desc", "@val_str_desc", "@val_num_desc", and "@unsorted".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Créer un fichier batch avec une arborescence.
    Par Khamazah dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 22/12/2022, 16h22
  2. Réponses: 1
    Dernier message: 16/04/2019, 20h01
  3. comment créer un fichier log dans PHP
    Par AliciaSH dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 14
    Dernier message: 19/05/2017, 11h59
  4. Créer un fichier mp3 avec une macro vba
    Par xavion dans le forum Excel
    Réponses: 10
    Dernier message: 14/11/2012, 20h01
  5. Réponses: 3
    Dernier message: 24/04/2007, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo