awkで文字列を結合する

awkで文字列を結合したい場面は稀によくあると思います。awkでの文字列の結合方法は一般的なプログラミング言語とは違い、少し癖があります。というのも、awkには文字列を結合するための演算子がありません。他の言語では + とか concat とかが用意されていますが、awkにはそれらはありません。それでは、どのようにして文字列を結合すれば良いのでしょうか。答えはズバリ、 並べるだけ です。

awkの文字列結合

awkでは文字列を並べるだけで結合してくれます。

$ echo abcde | awk '{print "Hello,""World"}'
Hello,World

これは変数でも同様です。

$ echo abcde | awk '{print "Hello"$1}'
Helloabcde

また、見栄えのために間にスペースを挟んでも良いです。

$ echo abcde | awk '{print "Hello," "World"}'
Hello,World

注意点

  • うっかり他の言語と間違えて + とか使うと0になります。
$ echo abcde | awk '{print "Hello"+"World"}'
0

おそらく文字列を数値に変換しようとして該当する数値がなかったので0+0になったのでしょう。試しに "Hello"+"5" とやったら 5 が返ってきました。

  • うっかり間に , とか挟むとスペースになっちゃいます。
$ echo abcde | awk '{print "Hello,","World"}'
Hello, World

間にカンマを挟むと Hello,World の間にスペースが空きます。awkでは文字列を出力する際に OFS(Output Field Separator) という組み込み変数で出力を区切ります。これがデフォルトでスペース区切りになっているため、カンマで区切った部分がスペースに変換されました。

参考:

Concatenation (The GNU Awk User’s Guide)