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) という組み込み変数で出力を区切ります。これがデフォルトでスペース区切りになっているため、カンマで区切った部分がスペースに変換されました。
参考: