QA@IT

Linux環境下で動作するawk Script を Windows7環境下のgawk Scriptで動作させるとエラーになる件

3764 PV

セミコロンで区切られたレコードファイル(ratings.dat)を
下記のCSV形式のレコードファイル(csv-ratings.dat)に
変換するため、次のようなAWKスクリプトを作成し、Linux環境
下で実行を確認できました。

/*** ratings.dat ***/

1::122::5::838985046
1::185::5::838983525
1::231::5::838983392
. . .

$ awk -v OFS=',' -v FS='::' '$1=$1' ratings.dat >csv-ratings.dat

/*** csv-ratings.dat ***/

1,122,5,838985046
1,185,5,838983525
1,231,5,838983392
. . .

ところが、この変換スクリプトをWindows7環境下のgawkで動作させると、
次のようなエラーが出て、実行できません。

jgawk -v OFS=',' -v FS='::' '$1=$1' ratings.dat >csv-ratings.dat

jgawk: '$1=$1'
jgawk: ^ 表現の char ''' は不正です。

どなたか、この原因がわかりませんでしょうか。

回答

コマンドプロンプトだと思いますが、
たしかWindowsのコマンドプロンプトはシングルクォートの使用に難があった気がします(ちょっとはっきり使えないと言い切れるかどうかは定かではないのですが)

オプションをダブルクォートで括ってみた場合はどうなるでしょうか?

編集 履歴 (0)
  • ご指摘のように、ダブルクォートでうまく行きました。迅速なる解答を頂き、ありがとうございました。 -

コマンドプロンプトでは、引用符の扱いがshとは大いに異なります。
・シングルクォートは特殊文字でない
・ダブルクォートは特殊文字だが、残る
なので、

jgawk -v OFS=, -v FS=:: $1=$1 ratings.dat >csv-ratings.dat

でやってみてください。gnu-win32のgawkだと、そのあたりよろしくやってくれるようで、
gawk -v OFS=',' -v FS='::' '$1=$1' ratings.dat >csv-ratings.dat
でもOKでした。

蛇足としては、処理条件が $1=$1 なので、先頭数字が 0 だと処理対象外ですが、大丈夫でしょうか?

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。