GNU/Linux >> Tutoriels Linux >  >> Linux

Utilitaires du shell Linux :convertir une liste d'hexadécimaux en une liste de décimales

La réponse de John T est la voie à suivre pour les conversions hexadécimales, mais vous pouvez également les faire de cette façon (qui peut également être utilisée pour d'autres bases) :

$ hexval=0x59999
$ hexval=${hexval#*x}
$ echo $((16#$hexval))
367001

Démonstration :

$ echo $((2#1011010))
90
$ echo $((8#1776))
1022
$ echo $((23#mmmmm))
6436342

Modifier :

#!/bin/bash
base=16
while read -r val
do
    val=${val#*x}
    echo $(($base#$val))
done < inputfile > outputfile

Le seul avantage par rapport à la réponse de John T est que celle-ci peut être facilement adaptée pour convertir d'autres bases en décimal. Le sien est un peu plus rapide.

Ce gawk semble être un peu plus rapide que la version shell de John :

gawk --non-decimal-data '{printf "%d\n",$1}' inputfile > outputfile

C'est à peu près la même vitesse que votre commande Perl. Pourquoi ne pas simplement l'utiliser ?

Au fait, la dernière partie de votre one-liner Perl peut être remplacée par le -l choix :

perl -lpe '$_=hex'

Autre remarque :en règle générale, le pipeline que vous montrez dans votre question s'écrit :

util < file1 > file2

ou, si cat représente des espaces réservés, alors les noms factices doivent être utilisés :

prog1 < file1 | util | prog2 > file2

alors vous n'aurez pas de gens se plaignant des utilisations inutiles de cat .


J'utilise normalement juste printf...

while read x;do printf '%d\n' $x;done <file


Linux
  1. 3 façons de lister les utilisateurs sous Linux

  2. Comment changer de shell sous Linux

  3. Commande d'écho Linux

  4. echo Exemples de commandes sous Linux

  5. Convertir .txt en .csv dans le shell

16 exemples de commandes Echo sous Linux

Commande source sous Linux

Qu'est-ce que le Shell sous Linux ?

Qu'est-ce que le shell de connexion sous Linux ?

8 types de shells Linux

Que fait % dans les chaînes du shell Linux ?