私はawk
テキストファイルを解析するために使用します。テキストファイルには、次の4バイトのデータフィールドがあります。
11110000 10100000 10110000 10010000
このフィールドを読み、2進数から16進数に変換したいと思います。現在私は10進数にprintf %x
なり、11110000
16進数になります。これが示す値ではありませ1111000
ん。0xA98760
0xF0
私のコードはシンプルで、BASHとLinuxを初めて使用します。
awk'{printf(%x %x %x %x, $1, $2, $3, $4)};
文字列フィールドをバイナリとして保存してから16進数に変換するには? "bc <<<"obase=16;ibase=2; を使用して端末から 16 進数を取得できます。 $変数""。このスクリプトを作成しようとすると構文エラーが発生します。
ベストアンサー1
awk
10進数、8進数、16進数のみサポートされ、2進数はサポートされていません。あなたが使用できるperl
:
perl -lane 'BEGIN{$, = " "} print unpack "(H2)*", pack("(B8)4", @F)'
dc
GNUの場合tac
(一部のシステムも参照tail -r
):
{ echo 16o2i; cat; echo f; } < file.txt | dc | tac
使用(構文エラーがbc
// /の最新バージョンではなく、シェルで使用されている演算子に関連していると仮定)<<<
zsh
zsh
bash
ksh93
mksh
yash
{ echo 'obase=16; ibase=2'; tr -cs 01 '[\n*]'; } < file.txt | bc