その他ノウハウ

awkコマンドでシェル変数を使ってファイル出力する

この記事の内容

  • シェルなどで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!!!

###############お知らせ################
ブログランキングのITカテゴリに参加してみました。
この記事が役に立ったなどお力になれたら、 このバナーを押していただけると嬉しいです。

#####################################

-その他ノウハウ