• [^] # 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é à 9. Dernière modification le 24 janvier 2022 à 19:27.

    une option -N pour ne convertir qu'un certain nombre de caractères là où on a déjà d'autres outils pour faire ça (comme head)...

    Pas compris... Je suppose que tu veux faire ceci avec head ?

    $ cat nbr.txt
    100
    301
    502
    703
    904
    105
    $ od -N4 -c nbr.txt
    0000000 1 0 0 \n 
    0000004
    $ head -c4 nbr.txt | od -c
    0000000 1 0 0 \n 
    0000004

    Historiquement, head n'avait pas l'option -c d'une part, et il n'y avait pas d'éditeur de binaire Or il fait sens de vouloir examiner une portion déterminée sans devoir remplir tout l'affichage (rappelons-nous des petits écrans sans mémoire tampon pour garder plusieurs pages écran en mémoire tout ça)

    Pour la petite histoire, od existe depuis la v1 d'UNIX AT&T, tandis que head est apparu plus tard dans PWB UNIX...

    $ od -j8 -N4 -c nbr.txt 
    0000010 5 0 2 \n 
    0000014
    $ xxd -s8 -l4 nbr.txt
    00000008: 3530 320a 502.
    $ od -j8 -N4 -x nbr.txt 
    0000010 3035 0a32 
    0000014

    Et c'est tellement inutile que même xxd permet de le faire ;D

    je ne comprends pas le choix de mettre plein d'options pour spécifier une sortie octale avec 1, 2 ou 4 caractères par ligne, des options pour des sorties hexa avec 2 ou 4 caractères par ligne

    En fait il y a deux notions, qui sont souvent liées quand on fait de la programmation : le (type de) format et la longueur. Cela correspond à signaler le type de données ...non signé qui sont interprétés... sans quoi lui il ne sait pas trop à quoi correspond le binaire sous-jacent.

    Si tu ne manipules que des octets, les choix seront plutôt entre :
    -tuC ou -tu1 pour la base 10, -tdC ou -td1 pour la même en nombre signé, -toC ou -to1 ou -b pour la base 8, -txC ou -tx1 pour la base 16.

    l'équivalent de xxd -p -c 1 pour convertir l'entrée en hexa sur une seule colonne

    Bon, le manuel dit que -p c'est le « postscript continuous hexdump style » ou « plain hexdump styple » hum. Et -c pour indiquet le nombre d'octets affichets par ligne, au lieu de 16 par défaut.

    $ echo test | xxd
    00000000: 7465 7374 0a test.
    $ echo test | xxd -p
    746573740a
    $ echo test | od -tx1
    0000000 74 65 73 74 0a 
    0000005
    $ echo test | od -An -tx1
     74 65 73 74 0a

    Pour supprimer le compteur (je suppose que c'est ce que fait le style continue à la postscript), il faut utiliser -An
    Pour afficher des octets aussi en hexa aussi, j'utilise -tx1 Par défaut il travaille sur deux octets : -x ou -h ou -tx2 en hexa, -o ou -B ou -to2 en octal par défaut. Et quand on prend par paire l'ordre est un peu différent...

    $ echo test | od -An -tx2
     6574 7473 000a 
    $ echo test | od -An -tx1 | tr -d ' '
    746573740a

    Par contre on ne sait pas agir sur le groupement, sauf avec l'implémentation GNU qui prévoit une option -w entre autres. Je pense que ce n'est pas grave vu que tu AWK après dessus ; sinon un pipe supplémentaire comme dans l'exemple pour virer les blancs.

    et xxd -p -r qui fait l'inverse

    OD et HexDump ne font pas l'inverse... Mais comme tu fais déjà du traitement avec AWK, peut-être utiliser sa faction chr (et ord dans l'autre sens ?) Je sais, c'est pas du jeu :-)

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