今回は次のように「詰み」が入力されていない柿木ファイルに「詰み」を挿入するスクリプトを書きます。

という棋譜を

という棋譜にすることが目標です。
以前にAWKのスクリプトを書いたときには【実行.bat】というファイルを作って起動しました。今回は悩んだのですが、普通にコマンドプロンプトから起動するようにしたいと思います。コマンドプロンプトを使ったことがない人は是非試してみてください。(筆者はPowerShellは使ったことありません)
左下の検索窓に「cmd」と入力します。

すると【cmd.exe】で出てきますのでクリックして起動します。

次のような窓が開きます。

そこに
cd desktop/work
と入力します。

次のように変わったら準備完了です。

さて、それではスクリプトに入りましょう。
問題の棋譜ファイルをエディタで開くと次のようになっています。
これを次のように直したいわけです。

ということは「#–separator–」の所まで読んで、この行を見つけたら「## 詰み」の行と「まで##手詰」の2行を出力すれば良いわけです。
それではスクリプトを書いてみましょう。
workフォルダに新しくテキストファイルを作成して

ファイル名を script01.awk に変更します。

エディタで開いて、次のように入力してください。

/separator/ {
printf(" %d 詰み ( 0:00/00:00:00)\n",TESUU+1)
printf("まで%d手詰\n",TESUU)
next
}
{
TESUU=$1
print
}
最初(L1~L5)にseparatorが見つかったときの処理を書いています。
下(L6~L9)はそれまでの行は手数を変数TESUUに記憶してあとは単に出力しているだけです。
さてこのスクリプトを動かしてみましょう。

まずは画面に出力して間違いが無いかどうか確認します。
gawk -f script01.awk 図巧/002.kif
と入力します。

ちゃんと最後の2行がうまくいっているようですね。
次にちゃんとファイルにして動くかどうか確認します。
失敗したときのために元のファイルは残すようにし、新しくフォルダを作ってそこにファイルを作成するようにしましょう。

workの中にnewというフォルダを用意しました。
コマンドプロンプトでF3を押し、少し変更します。
gawk -f script01.awk 図巧/002.kif > new/002.kif

これを実行するとnewフォルダの中に002.kifが作成されます。

柿木将棋で実行してみると、ちゃんと動きます。
上手くいったようです。
さていよいよ100局まとめて処理することを考えましょう。
100局まとめて処理するには「002.kif」を「*.kif」にします。*はワイルドカードというものです。出力もコマンドプロンプトかバッチファイルでできたような記憶があるのですが、調べても判らなかったのでスクリプトを書き直すことにしました。
(バッチファイルの本を捨ててしまったのが悔やまれます)
次のように script01.awk を書き換えました。

/separator/ {
printf(" %d 詰み ( 0:00/00:00:00)\n",TESUU+1)>Ofilename
printf("まで%d手詰\n",TESUU) > Ofilename
next
}
{
Ofilename=FILENAME
gsub("図巧","new",Ofilename)
TESUU=$1
print > Ofilename
}
入力ファイルを「図巧/*.kif」と指定した場合、読んでいるファイル名は FILENAME という変数にしまわれています。その「図巧」を「new」に置き換えれば出力するファイル名が得られます。その操作を7行目と8行目で行っています。
そして出力する printf と print の行に出力先を指定する「> Ofilename」を書き加えています。
さていよいよ実行です。

コマンドプロンプトに
gawk -f script01.awk 図巧/*.kif
と入力します。

無事成功しました。
次回は作者名や出典など詰将棋情報を入力する方法を考えましょう。
Tweet
