Die Antwort von John T ist der Weg für Hex-Konvertierungen, aber Sie können sie auch auf diese Weise ausführen (die auch für andere Basen verwendet werden kann):
$ hexval=0x59999
$ hexval=${hexval#*x}
$ echo $((16#$hexval))
367001
Demonstration:
$ echo $((2#1011010))
90
$ echo $((8#1776))
1022
$ echo $((23#mmmmm))
6436342
Bearbeiten:
#!/bin/bash
base=16
while read -r val
do
val=${val#*x}
echo $(($base#$val))
done < inputfile > outputfile
Der einzige Vorteil gegenüber der Antwort von John T besteht darin, dass diese leicht angepasst werden kann, um andere Basen in Dezimalzahlen umzuwandeln. Sein ist ziemlich viel schneller.
Dieser gawk
Befehl scheint etwas schneller zu sein als Johns Shell-Version:
gawk --non-decimal-data '{printf "%d\n",$1}' inputfile > outputfile
Es ist ungefähr so schnell wie Ihr Perl-Befehl. Warum nicht einfach benutzen?
Übrigens kann der letzte Teil Ihres Perl-Einzeilers durch die -l
Option ersetzt werden:
perl -lpe '$_=hex'
Noch ein Hinweis: Normalerweise wird die Pipeline, die Sie in Ihrer Frage anzeigen, wie folgt geschrieben:
util < file1 > file2
oder, wenn cat
Platzhalter dargestellt werden, sollten Dummy-Namen verwendet werden:
prog1 < file1 | util | prog2 > file2
dann werden Sie keine Leute haben, die sich über nutzlose Verwendungen von beschweren cat
.
cat
Befehle in Ihrer hypothetischen Pipeline sollte erforderlich sein.