SpringBootユーザー必見!各バージョンのサポート期限まとめ
saratogax
サラトガ牧場
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
では、実際にこの 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';
先ほど、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”