awk

awkで文字列にシングルクォーテーションやダブルクォーテーションを付けて出力する

記事内に商品プロモーションを含む場合があります

awk は特定の区切り文字で文字列を区切る時に多用しますが、区切った文字に他の文字列を連結することもあります。

通常の文字なら問題ないのですが、シングルクォーテーションだけは少し特殊です。

今回はこのようなケースを想定して、出力した文字にシングルクォーテーションを連結させてみたいと思います。

awkでファイルの特定のカラムを出力

例えば、下記の A から E までが半角スペースで区切られた文字列があった場合、A と B を SQL などのクエリ文字列に利用したい場面に遭遇したとします。

この場合、awk を使って A と B を抜き出すには下記のように表現します。

awkでシングルクォーテーションを出力する

では、実際にこの A と B を SQL の UPDATE 文を作成してみましょう。

その際、代入する文字列はシングルクォートで囲みます。

例として下記の UPDATE 文を表現してみます。

この時、シングルクォーテーションをそのまま書いても awk では解釈してくれないので、8 進数のエスケープシーケンスである「\047」で表現します。

また、エスケープではなく \(エンマークやバックスラッシュ自体)を表現するときは、2 個(\\)並べることで可能。

awkでダブルクォーテーションを出力する

先ほど、8 進数のエスケープシーケンスなのでシングルクォーテーションは「\047」と説明しました。

ダブルクォーテーションも同様に、8 進数のエスケープシーケンスを利用します。

以下は、コマンドライン引数をダブルクォーテーションで囲むコマンド例。

ダブルクォーテーションの場合は「\042」となるので、これに置き換えれば OK です。

結果は以下のようになります。

sh test.sh “A” “B” “C” “D”