GNU/Linux >> Linux の 問題 >  >> Linux

Linux シェル ユーティリティ:16 進数のリストを 10 進数のリストに変換する

ジョン 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


Linux
  1. Linux シェルで 16 進数を ASCII 文字に変換する方法は?

  2. Linux のシェル出力を HTML に変換するには?

  3. Linux シェルスクリプトからメールを送信する

  1. Linuxシェルスクリプトに新しい行を挿入するには?

  2. シェル文字列内の単語のリストを逆にする方法は?

  3. Linux シェル wc -c カウント文字数 +1

  1. Linuxでユーザーを一覧表示する3つの方法

  2. Linuxでシェルを変更する方法

  3. Linuxエコーコマンド