GNU/Linux >> Znalost Linux >  >> Linux

Linuxové shell utils:převod seznamu šestnáctkových čísel na seznam desetinných čísel

Odpověď Johna T je způsob, jak jít na hex převody, ale můžete je také udělat tímto způsobem (což lze použít i pro jiné základny):

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

Ukázka:

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

Upravit:

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

Jedinou výhodou oproti odpovědi Johna T je, že tuto lze snadno upravit pro převod jiných základů na desítkové. Jeho je o něco rychlejší.

Toto gawk Zdá se, že příkaz je o něco rychlejší než Johnova verze shellu:

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

Je to přibližně stejná rychlost jako váš příkaz v Perlu. Proč to prostě nepoužít?

Mimochodem, poslední část vaší perlové jednolinky může být nahrazena -l možnost:

perl -lpe '$_=hex'

Další poznámka:Typicky by kanál, který ukazujete ve své otázce, byl napsán jako:

util < file1 > file2

nebo, pokud cat reprezentuje zástupné symboly, pak by měly být použity fiktivní názvy:

prog1 < file1 | util | prog2 > file2

pak si nebudete muset stěžovat na zbytečné používání cat .


Normálně používám printf...

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


Linux
  1. 3 způsoby, jak zobrazit seznam uživatelů v Linuxu

  2. Jak změnit Shell v Linuxu

  3. Linuxový příkaz echo

  1. Linux ls Command - Seznam souborů

  2. 12 Bash pro příklady smyček pro vaše skriptování prostředí Linux

  3. Jak převést hex na ASCII znaky v prostředí Linuxu?

  1. Jak převést výstup shellu Linuxu do HTML?

  2. Odeslání pošty z linuxového shell skriptu

  3. Jak vložit nový řádek do skriptu prostředí Linux?