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 :

Affectation en AWK


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Affectation en AWK
    Bonjour tout le monde,

    Voici mon problème:

    j'ai un fichier MonFichier.csv (dont les colonnes sont séparées par des ";") je fais un test par rapport à la première colonne et j'affecte le contenu de la troisième colonne à la deuxième,, (sachant que je veux garder le même fichier en sortie )

    mais ça marche pas !!!

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    awk 'BEGIN {print " Traitement selon le NF" ; FS=";"}
    $1 == 1 {$2=$3}
    END {print"Cest fini"}' MonFichier.csv
    Si quelqu'un peut m'aider SVP

    Merci.

  2. #2
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut affectation awk
    Bonjour,

    Voici à quoi ressemble mon script après modification:

    je veux affecter des valeurs de certaines variables à d'autre dans le même fichier tout en testant le champs n° 5
    sachant que les champs n° 8 , 9 sont vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    awk -F ";" ' {
       if ($5 = 1){
          $8=$1; $9=$7;
       }else if ($5= 2){
          $8=$7; $9=$1;
       }
    }' File2.csv
    il me signale pas d'erreur mais toujours pas de résultat !!!!!


    quelqu'un peut m'orienter SVP

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 382
    Points
    19 382
    Par défaut
    Bonjour,

    if ($5 = 1) ceci assigne la valeur 1 au champ #5, c'est rarement faux, et ce n'est sûrement pas ce que tu veux.

    il faut deux signes égal :
    je veux garder le même fichier en sortie
    seule la dernière version de awk possède une option (in-place) qui permet de modifier "directement" un fichier.
    si ta version de awk ne le permet pas, il faut utiliser un fichier temporaire (c'est, de toute façon, ce que fait awk de manière invisible pour l'utilisateur).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Re Bonjour,

    ça marche pas toujours

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    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 277
    Points : 12 725
    Points
    12 725
    Par défaut
    Bonjour,
    Un petit print $0 en final affichera certainement quelque chose, car ici, je suppose que rien ne s'affiche ?
    A partir du moment ou awk commence à traiter des opérations, l'affichage de print $0 n'est plus implicite...
    Cordialement.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    quelle est la version de ton awk? Il est probable que ton awk ne modifie pas le fichier d'entrée et qu'il faille rediriger la sortie vers un fichier temporaire.

    Sinon, pour le fun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F ";" ' (($5==1)||($5==2)){$8=$(($5-1)*6+1);$9=$((2-$5)*6+1);}' File2.csv
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    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 277
    Points : 12 725
    Points
    12 725
    Par défaut
    Pour le fun tu crées une sortie vide ou si tu utilise la fameuse option 'in-place' du dernier awk un fichier vide ?
    Voici quelques exemple sur le fonctionnement de awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'foo;bar;toto;titi;1;;' | awk -F\; '$5 == 1'
    foo;bar;toto;titi;1;;
    Le print est implicite puisque le test est VRAI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ echo 'foo;bar;toto;titi;1;;' | awk -F\; '$5 == 0'
    Ici, pas de print puisque le test est FAUX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ echo 'foo;bar;toto;titi;1;;' | awk -F\; '$5 == 1 {$6=$3}'
    Ici, pas de print puisque pas précisé dans le bloc et ne retourne pas VRAI au programme awk lorsqu'il se termine (le cas de ton exemple ainsi que de celui de anabila).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'foo;bar;toto;titi;1;;' | awk -F\; '$5 == 1 {$6=$3;print $0}'
    foo bar toto titi 1 toto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'foo;bar;toto;titi;1;;' | awk -F\; '$5 == 1 {$6=$3;print}'
    foo bar toto titi 1 toto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'foo;bar;toto;titi;1;;' | awk -F\; '$5 == 1 {$6=$3}1'
    foo bar toto titi 1 toto
    3 façon de faire qui fonctionne (à choisir celle que l'on préfère), pour ma part, je conseillerais au débutant, la première qui est la plus explicite...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'foo;bar;toto;titi;1;;' | awk -F\; -v OFS=";" '$5 == 1 {$6=$3}1'
    foo;bar;toto;titi;1;toto;
    Cette dernière est la même que la 3ème de l'exemple précédent mais avec juste la configuration de la variable awk 'OFS' pour Output Field Separator, histoire de garder le même séparateur sortie.
    Cordialement.

Discussions similaires

  1. affecte " ou ' a une variable AWK
    Par ZashOne dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/02/2008, 17h47
  2. script SQL : affectation de variables
    Par Laura dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/10/2003, 21h32
  3. Affecter un attribut dans un fichier XML ou XSL
    Par LLaurent dans le forum XMLRAD
    Réponses: 7
    Dernier message: 05/06/2003, 14h04
  4. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26
  5. [MaskEditBox] Affecter avec un réel
    Par fikou dans le forum Général VBA
    Réponses: 6
    Dernier message: 16/09/2002, 09h28

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