GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Shell-Dienstprogramme:Konvertieren einer Liste von Hexadezimalzahlen in eine Liste von Dezimalzahlen

Die Antwort von John T ist der richtige Weg für Hex-Konvertierungen, aber Sie können sie auch auf diese Weise durchfü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. Seine ist um einiges schneller.

Dieses gawk Der 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 verwenden?

Übrigens kann der letzte Teil Ihres Perl-Einzeilers durch die -l ersetzt werden Möglichkeit:

perl -lpe '$_=hex'

Noch ein Hinweis:Normalerweise würde die Pipeline, die Sie in Ihrer Frage zeigen, wie folgt geschrieben:

util < file1 > file2

oder, falls cat Platzhalter darstellt, dann sollten Dummy-Namen verwendet werden:

prog1 < file1 | util | prog2 > file2

dann haben Sie keine Leute, die sich über die nutzlose Verwendung von cat beschweren .


Normalerweise verwende ich einfach printf...

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


Linux
  1. 3 Möglichkeiten zum Auflisten von Benutzern in Linux

  2. So ändern Sie die Shell unter Linux

  3. Linux-Echo-Befehl

  4. Linux-ls-Befehl - Dateien auflisten

  5. Wie füge ich eine neue Zeile in ein Linux-Shell-Skript ein?

16 Beispiele für Echo-Befehle unter Linux

Quellbefehl unter Linux

Was ist die Shell unter Linux?

Was ist die Login-Shell in Linux?

8 Arten von Linux-Shells

Senden einer E-Mail von einem Linux-Shell-Skript