技術系TIPS
PR

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

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

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

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

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

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

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

$ cat rilakkuma.txt

A B C D E

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

$ awk -F' ' '{print $1" "$2}' rilakkuma.txt

A B

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

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

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

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

(テーブル名を rilakkuma と仮定します)

UPDATE rilakkuma SET id = 'A', name = 'B';

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

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

$ awk -F' ' '{print "UPDATE rilakkuma SET id = \047"$1"\047, name = \047"$2"\047"}' rilakkuma.txt

UPDATE rilakkuma SET id = 'A', name = 'B';

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

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

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

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

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

awk -F' ' '{print "sh test.sh \042" $1"\042 \042"$2"\042 \042"$3"\042 \042"$4"\042"}' rilakkuma.txt

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

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

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました