この記事の内容
- シェルなどでawkコマンドを使っている際に、出力先ファイル名にシェル変数${}を使う方法を解説
ポイント
- ${}を含むファイル名部分をawkコマンドのシングルクオーテーションの外に出す。
- シングルクオーテーションの外にある文字列はシェルの記法として解釈される
- その後、シングルクオーテーション内の文字列として処理される
OKなパターン
以下の様に書いてください。
${DIR}の部分がシェルの変数です。
awk < ${BASE_DIR}/data/user.csv -F, '{OFMT="%.10g"} {OFS=","} NR==1{ print $1,$2,$3,$4 > "'"${DIR}/data/user.csv"'"} NR>1{ print $1,$2,$3,$4/10000000 - 11644473600 >> "'"${DIR}/data/user.csv"'"}'
ポイントになるのは先述の通り、シェル変数を使う領域をシングルクオーテーションの外に出すことです。
どうやっているのかというと、以下のようにします。
"'"${DIR}/data/user.csv"'"
この記法により、該当の文字列はシングルクオーテーションの外に出ます。
もう少し詳細に書くと、シングルクオーテーションをダブルクォーテーションで囲っています。
'{OFMT="%.10g"} {OFS=","} NR==1{ print $1,$2,$3,$4 > "'"${DIR}/data/user.csv"'"}
先頭のシングルクオーテーションと${DIR}の前にあるダブルクォーテーションで囲ったシングルクオーテーションが対応して文字列が閉じられます。
そのご、.csvの後ろにある囲ったシングルクオーテーションから再度awkの書式が開始され、awkの関数を記述できます。
先の例では、ファイルへの書き込みを2か所で行っているため、囲ったシングルクオーテーションが2か所に登場しています。
なんてややこしいんだ!!AWK!!!