はじめに

多量の行が表示されないように、このブログは1コンテンツしか表示されない。ブログアーカイブから、他の記事を捜してくれ。

環境作れし。
・gawk 3.1.5 for Windows をググッて入手。
・gawk.exeをpathの通ったフォルダにぶち込めし。
 (「windows パスを通す」ググッて)
 (面倒なら、C:\windowsにぶち込む)
・環境変数「awkpath」にスクリプトを保存するフォルダを設定。
 (「環境変数 設定 windows」ググッて)
 (面倒なら、C:\windowsに、紹介されているスクリプトぶち込む)

2013年9月29日日曜日

ファイルをバイナリダンプするAWKScript

なんとgawk3.1.5はバイナリファイルも読み込める
可変長バイナリレコードのログファイルもテキスト化できるわけだ。

ま、バイナリレコードなんて、個別仕様だから、今回はテンプレートとして使ってくれ。

例では、先頭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 配列名"で削除してくれ。今回は定数配列なんで気にしない。

dmp.bat


dmp.awk

0 件のコメント:

コメントを投稿