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 :

Conversion hexa / décimal


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut Conversion hexa / décimal
    Bonsoir tout le monde,
    j'ai un script shell qui s'exécute et rempli un fichier avec des chaines de caratctère dont la forme est la suivante: 6548 1255 1245 ...
    malheureusment, le résullat est retourné sous la forme d'une chaine hexadécimal dont la forme est la suivante FE 06 92 74 15 87 3B 41. Chaque nombre (exemple 6548) est codé sur 4 caractères hexa. Donc si on veut convertir la chaine FE 06 92 74 15 87 3B 41 au format spécifié plus haut, il va falloir rassembler chaque 4 caractère puis faire une conversion.
    Je ne sais pas comment faire un tel traitement en shell (je l'ai réalisé en java mais c'est impossible d'ajouter une instruction java dans un code shell à ce que je sache).

    merci pour votre aide

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [fpsslt@ln ~] cat > /tmp/toto
    FE 06 92 74 15 87 3B 41
    ^D
    [fpsslt@ln ~] sed 's/\(..\) \(..\)/\1\2/g' /tmp/toto
    FE06 9274 1587 3B41
    [fpsslt@ln~]
    peut être une solution en redirigeant le résultat vers le fichier de sortie bien sur.
    si par contre tu veux vraiment convertir en decimal en plus il faut le faire en deux passes

    une pour le regroupement des caractère (en mémoire) et une en convertissant vers le fichier de sortie le résultat final.

    la conversion est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [fpsslt@ln ~] toto=F4ED
    [fpsslt@ln ~] echo "ibase=16; ${toto}"|bc
    62701
    [fpsslt@ln ~]
    je te laisses faire la mise en forme mais là tu as tout pour le faire.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    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 284
    Points : 12 739
    Points
    12 739
    Par défaut
    Bonjour,

    En gros, si je reprends ta réponse frp31 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat /tmp/toto
    FE 06 92 74 15 87 3B 41
    $ sed "s/\(..\) \(..\)/\1\2;/g;s/\(.*\)/echo 'ibase=16; \1'|bc/e;s/\n/ /g" /tmp/toto
    65030 37492 5511 15169
    Cordialement.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    merci beaucoup pour cette réponse rapide.
    Je vais tester tout ça et je vous tiendrai au courant.

  5. #5
    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 459
    Points
    13 459
    Par défaut
    Le regroupement de 2 fois 2 chiffres hexa n'inversent-il pas les deux groupes de chiffres?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed "s/\(..\) \(..\)/\2\1;/g;s/.*/echo 'ibase=16; &'|bc/e;s/\n/ /g" /tmp/toto
    NB1: Inversion de \1 et \2
    NB2: Comme une seule référence arrière est nécessaire, j'ai supprimé les parenthèses et mis & à la place de \1 car il représente tout ce qui a correspondu.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    En gros, si je reprends ta réponse frp31 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat /tmp/toto
    FE 06 92 74 15 87 3B 41
    $ sed "s/\(..\) \(..\)/\1\2;/g;s/\(.*\)/echo 'ibase=16; \1'|bc/e;s/\n/ /g" /tmp/toto
    65030 37492 5511 15169
    j'ai testé cette méthode et elle fonctionne très bien. Mais j'ai un problème qui n'a aucune relation avec le script. Au fait j'en ai deux:
    - le résultat affiché par la requête se trouve parfois divisé sur 2 ou trois lignes, choses que j'arrive pas à régler (pourtant il n'y a aucune raison pour retourner à la ligne),
    - la chaine est entouré de " "
    donc finalement mon fichier se présente la forme suivante
    "02 04 FE 06 92 74 15 87 3B 41 "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "

    je veux que ça soit sous cette forme pour que ton script fonctionne comme il faut
    FE 06 92 74 15 87 3B 41
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B
    comment faire??
    merci

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    awk '{if($0!~"\"$"){p=$0; getline}
       $0=p OFS $0
       gsub(" *\"","")
       for(i=1;i<=NF;i++){
          if(i%2)c=$i; else{printf("%d ", strtonum("0x"c""$i));c=""}
       }
       print ""
    }' fichierIn
    la prochaine fois commence par nous donner tout de suite un aperçu du fichier réel !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    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 459
    Points
    13 459
    Par défaut
    j'ai testé cette méthode et elle fonctionne très bien
    Et bien moi, je ne crois pas. Tu as un résultat et ce résultat est faux. Pour t'en convaincre voici deux commandes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ od -t x1 initial.txt 
    0000000 46 45 20 30 36 20 39 32 20 37 34 20 31 35 20 38
    0000020 37 20 33 42 20 34 31 0a
    0000030
    $ od -t x2 initial.txt 
    0000000 4546 3020 2036 3239 3720 2034 3531 3820
    0000020 2037 4233 3420 0a31
    0000030


    Sinon, pour les guillemets, tu peux faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ sed '/[0-9A-F] $/{N;s/\n//};s/\"//g;s/.. .. //' ton_fichier.txt
    FE 06 92 74 15 87 3B 41 
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B 
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B 
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B 
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B 
    FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79 1D 79 1D 79 DB 8B
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    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 284
    Points : 12 739
    Points
    12 739
    Par défaut
    Pas testé la partie bc (pas installer chez moi):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n ':deb;/\"$/!{N;s/\n//g;b deb};s/"//g;s/\(..\) \(..\)/\1\2;/g;s/\(.*\)/echo "ibase=16; &"|bc/e;s/\n/ /g' /tmp/toto
    Cordialement.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Autre solution awk, traitée différemment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk --non-decimal-data 'NF>4{for(i=1;i<NF;i+=2){printf "%d ","0x"$i$(i+1)};print ""}' RS='"|""' FS=" \n?" fichier
    A noter cependant que le résultat diffère de celui généré par le script de N_Bah. Voici ce que j'obtiens:

    516 65030 37492 5511 15169
    522 65030 37492 5511 174 7545 7545 7545 29 31005 31195 139
    522 65030 37492 5511 174 7545 7545 7545 29 31005 31195 139
    522 65030 37492 5511 174 7545 7545 7545 29 31005 31195 139
    522 65030 37492 5511 174 7545 7545 7545 29 31005 31195 139
    522 65030 37492 5511 174 7545 7545 7545 29 31005 31195 139
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    j'obtiens le même résultat avec les deux commandes.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    j'obtiens le même résultat avec les deux commandes.
    Finalement, moi aussi. Mauvais copier coller sans doute.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    Bonjour, voila j'ai vérifié les scripts mais le résultat retourné est faux. Au fait je sais exactement comment devrait être les lignes (puisqu'elles son présente dans une table de routage). voici la forme du fichier qui doit être retournée (j'ai pris les 10 premières lignes)

    65030 37492 5511 15169
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 2914 2519
    65030 37492 5511 2914 2519
    65030 37492 5511 2914 2519
    65030 37492 5511 2914 2519

    remarque: pour commencer avec le nombre 65030 il fallait changer la variable i dans le script en l'initialisant à 3

    je vous remet encore une fois la forme du fichier (les 10 premières chaines)

    "02 04 FE 06 92 74 15 87 3B 41 "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "

    le conversion de ce fichier devrait donner exctement le résultat plus haut.
    je vais essayer d'arranger un peu le script pour le corriger. J'espère que vous pourrez m'éclairer de votre côté.

    merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Citation Envoyé par supcomingenieur
    pour commencer avec le nombre 65030 il fallait changer la variable i dans le script en l'initialisant à 3
    c'est tout.

    pourquoi il ne faut pas prendre en compte les deux premières valeurs ...?
    toi seul peut le dire.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    Au fait chaque chaine représente la suites des systèmes autonomes à suivre pour atteindre une destination IP. les deux premières valeurs (02 0X) représente des informations supplémentaires sur le chemin. Mais l'information utlise commence après ces deux valeurs et c'est exactement ce que je veux avoir.
    C'est ton scripts que j'ai testé, les reste n'ont pas du tout fonctionné. J'essaie maintenant de trouver l'erreur qui fais que le résultat retourné soit ainsi mais je ne comprend pas.

    Pour plus d'informations, et puisque tu as demandé, la deuxième valeurs peut t'être utilise pour tester si le resltat est correct ou non: en effet, 0X correspond au nombre de mots decimal contenu dans la chaine. Par exemple si 0X=04 cela veut dire que ma chaine décimale doit avoir cette forme par exemple: 5425 454 7575 122 (je dis bien que c'est un exemple).

    Voila, merci pour ton aide si tu trouve la faille fais le moi savoir, je vais chercher de mon côté.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    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 284
    Points : 12 739
    Points
    12 739
    Par défaut
    Après avoir toutes les informations et retirer le -n (car, comme expliqué, je ne pouvait pas tester le bc):
    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
    $ cat /tmp/toto
    "02 04 FE 06 92 74 15 87 3B 41 "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    $ sed ':deb;/\"$/!{N;s/\n//g;b deb};s/"//g;s/\(..\) \(..\)/\1\2;/g;s/^[^;]\+; \(.*\)/echo "ibase=16; \1"|bc/e;s/\n/ /g' /tmp/toto
    65030 37492 5511 15169
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203
    65030 37492 5511 2914 2519
    65030 37492 5511 2914 2519
    65030 37492 5511 2914 2519
    65030 37492 5511 2914 2519
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    oops!

    j'avais oublié de réinitialiser p

    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
    "02 04 FE 06 92 74 15 87 3B 41 "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 0A FE 06 92 74 15 87 00 AE 1D 79 1D 79 1D 79
    1D 79 1D 79 DB 8B "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    "02 05 FE 06 92 74 15 87 0B 62 09 D7 "
    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
    $ awk '{if($0!~"\"$"){p=$0; getline}
       $0=p OFS $0
       gsub(" *\"","")
       for(i=3;i<=NF;i++){
          if(i%2)c=$i; else{printf("%d ", strtonum("0x"c $i));c=""}
       }
       p=""
       print p 
    }' fichier
    65030 37492 5511 15169 
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203 
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203 
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203 
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203 
    65030 37492 5511 174 7545 7545 7545 7545 7545 56203 
    65030 37492 5511 2914 2519 
    65030 37492 5511 2914 2519 
    65030 37492 5511 2914 2519 
    65030 37492 5511 2914 2519
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre aide, maintenant ça marche très bien. Je vais garder tous vos scripts parce qu'ils m'ont tous servi à apprendre quelque chose de nouveau.

  19. #19
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    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 284
    Points : 12 739
    Points
    12 739
    Par défaut
    Ce qui pourrait être amusant, c'est de le faire en pur shell sans awk, sed et bc :
    Dans le pire, la formule cela doit être x * 256 + y (bien sur après avoir convertie x et y en decimal)
    Cordialement.

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    J'ai un peu de mal à comprendre à quoi sert l'enchaînement:

Discussions similaires

  1. Conversion Hexa en Décimal
    Par riko7790 dans le forum Général Python
    Réponses: 4
    Dernier message: 23/04/2014, 18h54
  2. Conversion Hexa => binaire => décimal
    Par Matmal11 dans le forum Tcl/Tk
    Réponses: 6
    Dernier message: 10/04/2010, 13h53
  3. Conversion nombre décimal en virgule flottante IEEE 754 (exprimé en hexa)
    Par vinssieux dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 15/05/2008, 09h40
  4. Conversion Hexa -> décimal
    Par Nemesis007 dans le forum C
    Réponses: 3
    Dernier message: 30/04/2007, 15h51
  5. conversion hexa-binaire
    Par jack69 dans le forum C
    Réponses: 8
    Dernier message: 04/04/2005, 16h33

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