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 :

AWK modifier le séparateur décimal . en ,


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé de traitement
    Inscrit en
    Décembre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Chargé de traitement
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 16
    Points : 11
    Points
    11
    Par défaut AWK modifier le séparateur décimal . en ,
    Bonjour,

    Je souhaiterais en langage awk modifier "." en "," dans mon fichier
    mais uniquement pour les nombres car j'ai aussi des chaînes de caractères qui peuvent contenir des "." auxquelles je ne veux pas toucher

    par exemple mon fichier est ainsi :
    1.04 5.2 Il a dit rouge. Il est ok
    c'est un sapin. 0.05

    Et je souhaiterai le réécrire ainsi :
    1,04 5,2 Il a dit rouge. Il est ok
    c'est un sapin. 0,05

    Pourriez-vous m'aider svp ?

    j'ai tenté un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gsub("[0-9]\\.[0-9]",",",$0)
    mais je ne sais pas comment écrire "remettre les mêmes chiffres trouvés avant et après le ."

    J'ai aussi tenté une boucle qui me retourne une erreur pour la ligne 5 et je n'arrive pas à corriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (k=1;k<=NF;k++)
    		{
    		if (substr($0,k,k+2) == "[0-9].[0-9]")
    			{
    			substr($0,k+1,1)=","
    			}
    		}
    		printf ($0"\n") > "test"

  2. #2
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Le plus simple est peut-être que tu utilises la fonction gnu gensub de gawk, qui autorise les références arrière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gensub(/([0-9])\.([0-9])/,"\\1,\\2","g")
    Sinon pour ton code, la ligne qui sort en erreur n'a pas de sens : tu cherches à affecter la valeur , à la valeur renvoyée par substr.
    Si tu veux faire une boucle pour traiter les occurrences de [0-9]\.[0-9], il faut que tu utilises la fonction match, qui va te renvoyer les indices où se trouvent ces occurrences dans $0, et que tu concatènes les morceaux de chaine de caractères extraits de $0 suivant ces indices (en remplaçant au passage le point par une virgule, évidemment, sinon l'opération n'a aucun intérêt).

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed 's/\.\([0-9]\+\)/,\1/g' fichier.txt
    1,04 5,2 Il a dit rouge. Il est ok
    c'est un sapin. 0,05
    Note qu'avec la transformation que tu demandes, tu ne pourras plus faire de calcul, à moins de faire la transformation inverse.
    Note aussi que "0.23" est parfois noté ".23". Du coup, il devient primordial de respecter l'espace après le point, si ce n'est pas le séparateur entre la partie entière et la mantisse d'un nombre.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chargé de traitement
    Inscrit en
    Décembre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Chargé de traitement
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Bonjour, merci beaucoup pour votre aide, ma boucle a fonctionné grâce à la réponse de balkany, et super pour ton "sed" flodelarab cela fonctionne également ! Par contre je ne sais pas pourquoi le "gensub" n'existe pas chez moi, peut-être que la version gawk que j'utilise sur mon réseau n'a pas ceci d'installé ? Je me renseignerai

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    est-ce bien GNUawk qui est installé sur ton système ? quel OS ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Chargé de traitement
    Inscrit en
    Décembre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Chargé de traitement
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    quand je tape : "cat /proc/version" j'obtiens comme info :
    Linux version 4.4.0-171-generic (buildd@lcy01-amd64-018) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) ) #200-Ubuntu SMP Tue Dec 3 11:04:55 UTC 2019

    Mais pour ta première question je ne sais pas du tout comment voir ce qui est installé comme awk

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in /usr/bin/*awk; do echo -n "$i ->"; $(readlink -f "$i") --version | head -1; done
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Chargé de traitement
    Inscrit en
    Décembre 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Chargé de traitement
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    waouh merci, voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /usr/bin/awk ->GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
    /usr/bin/gawk ->GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
    /usr/bin/igawk ->GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
    /usr/bin/mawk ->/usr/bin/nawk ->GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    bizarrement, tous les appels aux différentes variantes renvoient vers gawk.

    tu as ouvert la page man de gawk pour en savoir plus sur gensub ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Peut-être le forcing du posix via alias ou via environnement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo toto | gawk '{gensub()}'
    gawk: ligne de commande:1: {gensub()}
    gawk: ligne de commande:1:         ^ 0 n'est pas un nombre d'arguments valide de gensub
    $ echo toto | gawk --posix '{gensub()}'
    gawk: ligne de commande:1: (FILENAME=- FNR=1) fatal*: function `gensub' not defined
    $ export POSIXLY_CORRECT=1
    $ echo toto | gawk '{gensub()}'
    gawk: ligne de commande:1: (FILENAME=- FNR=1) fatal*: function `gensub' not defined
    Cordialement.

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

Discussions similaires

  1. [Character SET] Modifier un caractére
    Par ducho dans le forum Oracle
    Réponses: 5
    Dernier message: 24/03/2014, 17h50
  2. Comment modifier un caractère dans MySQL
    Par Strategis dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 17/06/2007, 07h54
  3. Réponses: 1
    Dernier message: 19/05/2007, 13h04
  4. Réponses: 1
    Dernier message: 29/10/2006, 12h03
  5. [VB.NET] Modifier un caractère d'un string
    Par mat087 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/11/2005, 00h44

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