ジョン T の答えは 16 進変換の方法ですが、この方法でも実行できます (他のベースにも使用できます):
$ hexval=0x59999
$ hexval=${hexval#*x}
$ echo $((16#$hexval))
367001
デモンストレーション:
$ echo $((2#1011010))
90
$ echo $((8#1776))
1022
$ echo $((23#mmmmm))
6436342
編集:
#!/bin/bash
base=16
while read -r val
do
val=${val#*x}
echo $(($base#$val))
done < inputfile > outputfile
John Tの答えに対する唯一の利点は、これを他の基数を10進数に変換するために簡単に適応できることです。彼の方がかなり速いです。
この gawk
コマンドは、John のシェル バージョンよりも少し速いようです:
gawk --non-decimal-data '{printf "%d\n",$1}' inputfile > outputfile
Perl コマンドとほぼ同じ速度です。なぜそれを使わないのですか?
ちなみに、Perl ワンライナーの最後の部分は -l
に置き換えることができます。 オプション:
perl -lpe '$_=hex'
別の注意:通常、質問で表示するパイプラインは次のように記述されます:
util < file1 > file2
または、cat
の場合 プレースホルダーを表す場合は、ダミーの名前を使用する必要があります:
prog1 < file1 | util | prog2 > file2
そうすれば、cat
の無用な使用について文句を言う人はいないでしょう。 .
通常は printf を使用します...
while read x;do printf '%d\n' $x;done <file