• [^] # Re: xxd

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche get-tracks.sh : extraire des pistes d'un fichier audio. Évalué à 5. Dernière modification le 25 janvier 2022 à 19:57.

    Dans cet enchainement :

     tr " " "\n" | uppercase

    ...tu peux combiner les deux en une opération

     tr "[a-z] " "[A-Z]\n"

    ...et le test est concluant :

    $ cat hex.txt 
    61 62 0a
    63 64 0a
    $ cat hex.txt | tr "[a-z] " "[A-Z]\n"
    61
    62
    0A
    63
    64
    0A

    Et là, on aimerait bien passer tout ça à awk pour qu'il traduise ça en caractères affichables via sa fonction printf.
    Mais il lui faut un nombre en base 10 et je sais pas traduire l'hexa facilement avec awk (hors version GNU),

    Bien vu pour printf. Le "truc" est juste de lui passer une chaîne déjà en hexa ...en forçant la chaîne de caractères à être lu comme un nombre hexa...

    printf "%d\n", (("0x" $1) + 0)

    Vérification...

    $ echo "obase=10;ibase=16; 61" | bc
    97
    $ echo "61" | awk '{ printf "%d\n", (("0x" 1ドル) + 0) }'
    97
    $ cat hex.txt | tr "[a-z] " "[A-Z]\n" | awk '{printf "%d\n", (("0x" 1ドル) + 0)}'
    97
    98
    10
    99
    100
    10

    Tu étais donc sur la bonne voie ; j'y aurais pas pensé à ce détour tout seul.

    Est-ce qu'on aurait pas plus simple encore ?

    [edit] Du coup, on peut combiner from_hex_to_decimal | from_dec pour la route :D

    $ cat hex.txt | tr "[a-z] " "[A-Z]\n" | awk '{printf "%c", (("0x" 1ドル) + 0)}'
    ab
    cd

    "It is seldom that liberty of any kind is lost all at once." ― David Hume