2016-08-09 1 views
0

J'ai besoin de décaler de 9bits un nombre décimal et d'imprimer le résultat en hexadécimal.Décaler une décimale de 9 bits avec awk (impossible d'utiliser gawk lshift)

Voici un exemple:

# Desired result: 
perl -e "printf('%x', (99 << 9))"; echo; 
c600 

# Use case: 
awk 'BEGIN{ d=99; printf("Decimal: %d, Hexadecimal: %x\n", d, d }' 
Decimal: 99, Hexadecimal: 63 # Must be left shift by 9 (c600) 

Pouvez-vous me donner un moyen de reproduire cela?

Répondre

2
$ awk 'BEGIN{ d=99; x=d*2^9; printf("Decimal: %d, Hexadecimal: %x\n", d, x)}' 
Decimal: 99, Hexadecimal: c600 
1

Pas besoin de awk, vous pouvez le faire en bash en utilisant printf:

printf "%x\n" $((99 << 9)) 
c600 

Si vous devez utiliser awk (gnu) puis utilisez lshift fonction:

awk 'BEGIN{printf "%x\n", lshift(99, 9)}' 
c600 
+0

utilisant awk son obligatoire pour moi, et pour lshift: awk: ligne 2: fonction lshift jamais définie Mais je vous remercie de l'aide – Moker

+0

'lshift' est disponible avec gnu AWK pas avec plus awk – anubhava

+0

vous avez certainement un fichier/etc/par défaut/lien symbolique de awk à gawk ^^ @anubhava – Moker

2

À moins que nous avons précision limitée, le décalage vers la gauche de 9 est identique à la multiplication par 2^9 = 512:

$ awk 'BEGIN{ d=99; printf("Decimal: %d, Hexadecimal: %x\n", 512*d, 512*d) }' 
Decimal: 50688, Hexadecimal: c600 
+1

merci beaucoup, ça m'aide vraiment – Moker