なんとgawk3.1.5はバイナリファイルも読み込める
可変長バイナリレコードのログファイルもテキスト化できるわけだ。
可変長バイナリレコードのログファイルもテキスト化できるわけだ。
ま、バイナリレコードなんて、個別仕様だから、今回はテンプレートとして使ってくれ。
例では、先頭4バイトをリトルエンディアンのlong値、次の2バイトをリトルエンディアンのshort値、残りを16進ダンプで出力している。呼び出していないが、ゾーン10進用の関数もある。
お好みのダンプツールを作ってくれ。
例では、先頭4バイトをリトルエンディアンのlong値、次の2バイトをリトルエンディアンのshort値、残りを16進ダンプで出力している。呼び出していないが、ゾーン10進用の関数もある。
お好みのダンプツールを作ってくれ。
AWKのつぼ
・入力ファイルに変な変換がかからないようにgawk呼び出しパラメタに"--ctype=ASCII"を指定している
・BEGIN節でBINMODE=3,RS=""を指定することで、1行のデータとして全ファイルを読み込んでいる
・AWKはスコープルールがないので、通常、関数内でローカル変数が宣言できない。…が、関数パラメタだけはスタックに積まれるので、その特性を利用し、ローカル変数はその関数のパラメタに、無理やり宣言する。
例えば、function bin(n ,i,s)は、実際は(n)のみパラメタで受け渡されて、i,sは関数内で使われるローカル変数だ。
これにより、関数の再起呼び出しも可能となる。
・GAWKは連想配列が使える。C#系ではINDEX形と呼ばれているヤシ。
配列の添え字に文字列が使えるので便利だね。内部的にはハッシュテーブルとか使ってるはずだが、プログラマはハッシュを意識しなくてもよい。
ま、ゴミが気になった時には、"delete 配列名"で削除してくれ。今回は定数配列なんで気にしない。
・入力ファイルに変な変換がかからないようにgawk呼び出しパラメタに"--ctype=ASCII"を指定している
・BEGIN節でBINMODE=3,RS=""を指定することで、1行のデータとして全ファイルを読み込んでいる
・AWKはスコープルールがないので、通常、関数内でローカル変数が宣言できない。…が、関数パラメタだけはスタックに積まれるので、その特性を利用し、ローカル変数はその関数のパラメタに、無理やり宣言する。
例えば、function bin(n ,i,s)は、実際は(n)のみパラメタで受け渡されて、i,sは関数内で使われるローカル変数だ。
これにより、関数の再起呼び出しも可能となる。
・GAWKは連想配列が使える。C#系ではINDEX形と呼ばれているヤシ。
配列の添え字に文字列が使えるので便利だね。内部的にはハッシュテーブルとか使ってるはずだが、プログラマはハッシュを意識しなくてもよい。
ま、ゴミが気になった時には、"delete 配列名"で削除してくれ。今回は定数配列なんで気にしない。
dmp.bat
dmp.awk