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 :

Script awk avoir une variable chaine de longeur definie


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 69
    Par défaut Script awk avoir une variable chaine de longeur definie
    Bonjour,

    Je débute en shell, et je dois redévelopper en awk un script.
    Aa partir d'un shell j'envoie un fichier à traiter dans un script awk
    Les données envoyées sont organisées en colonnes et sont des valeurs binaires.
    Mon problème est le suivant:
    Je dois réaliser un test sur un bit spécifique d'une variable colonne ($2 par exemple).

    $1 $2 $n
    00000001 00011011 ....

    Mais je n'arrive pas a avoir une longueur de ma chaine constant.
    par exemple si je veux tester le bit 4 : 1001 1001 ( lsb a droite) pas de problème cela fonctionne
    par contre si ma variable vaut 0000 0010 ( lsb a droite) la valeur de la variable lue est 10 et je ne peux pas tester le 4eme bit
    comment puis je faire pour fixer la longueur de ma chaine
    ou du moins récupérer n'importe quel bit, même si il "n'existe pas".

    Je vous remercie

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Bonjour,

    tu peux nous fournir le code que tu utilises, s'il te plaît?

    moi, j'en suis à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "00000001 00011011" | awk '{print substr($1,4,1)}'
    0
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour,

    En espérant que ça t'aide:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ awk 'BEGIN{FS=""} {print $1;}' <<<"00010001 0100101010"
    0
    $ awk 'BEGIN{FS=""} {print $3;}' <<<"00010001 0100101010"
    0
    $ awk 'BEGIN{FS=""} {print $4;}' <<<"00010001 0100101010"
    1
    $

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 69
    Par défaut
    Bonjour,

    je me suis mal exprimé dans mes exemples, et je vous prie de m'excuser. En entrée de traitement j'ai une valeur du type 110, et je souhaiterais avoir 0000 0110.


    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [...]
    awk -f $Decodage_pgm  $Fichier_Input > $Fichier_Decode 
    [...]

    Decodage_pgm (fichier .awk):

    Code awk : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if ($15!=10 && $15!=11)
    {
                 Char_1=ISO5($15)
    	Char_2=ISO5($17)
    	Char_3=ISO5($19)
    }
     
    else if ($15==10)
    {
    	print $0 > Log_file #test debug
    	bit16_17=substr($17,length($17)-1,1)""$18
    	print bit16_17 > Log_file
    }

    Mon problème vient de la ligne : bit16_17=substr($17,length($17)-1,1)""$18, et plus particulièrement du substr. Ici , si la variable vaut 0001 (binaire) le code agit comme si la variable est égale à 1, et je ne peux donc pas récupérer le 4eme bit.
    J'ai veux donc fixer la longueur de ma chaine (je pense que c'est la meilleure solution), dans le cas contraire je dois faire des conditions sur les conditions de longueur de ma chaine qui va alourdir le traitement ( plusieurs dizaines de fichiers de plusieurs milliers de lignes chacun).

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    je me suis mal exprimé dans mes exemples
    et je vous prie de m'excuser.




    Code exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    awk -v b=110 'BEGIN{o=sprintf("%08.0f",b); o=substr(o,1,4)" "substr(o,4,4); print o}'
    0000 0011
    ???
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 69
    Par défaut
    Super, c'est exactement ça!!!
    Merci beaucoup!!

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Euh... J'ai du mal à comprendre à quel moment 110 devient 3 ou 192. Qui inverse?

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

Discussions similaires

  1. [Script KSH]Afficher une variable dans awk
    Par Rizzen dans le forum Linux
    Réponses: 3
    Dernier message: 11/05/2009, 13h51
  2. [SQL] SCRIPT pour avoir une navigation avec les lettres de l'alphabet
    Par gantec dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 20/09/2007, 08h45
  3. [C#] commente avoir une variable Globale?
    Par lykim1982 dans le forum C#
    Réponses: 4
    Dernier message: 08/02/2007, 08h04
  4. [MySQL] code php dans une variable chaine php
    Par unmulot dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 11/07/2006, 10h48
  5. Executer 1 script contenu dans une variable PHP
    Par emstar dans le forum Langage
    Réponses: 5
    Dernier message: 19/04/2006, 11h48

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