awkのgsub()とsub()の違いは、置換回数の制約になります。
gsub():置換対象文字列があった場合は全て置換する
sub():最初の置換対象文字列のみ1回置換
gsub()のサンプルコード
gsub()の動きをサンプルコードで確認してみたいと思います。
下記のようにin.txtがあったとします。
$ cat in.txt 2016-11-15 雨 2016-11-16 曇り 2016-11-17 晴れ
下記のようにgsub()を使って、1フィールド(列)目の"-"を"/"に置換して、print出力しています。
$ cat sample.awk #!/bin/sh cat in.txt | awk ' { gsub( "-", "/", $1 ) print $1 , $2 } '
実行すると、全ての"-"が"/"に置換されています。
$ ./sample.awk 2016/11/15 雨 2016/11/16 曇り 2016/11/17 晴れ
sub()のサンプルコード
sub()の動きをサンプルコードで確認してみたいと思います。
in.txtについては、gsub()の時と同じファイルにしています。
$ cat in.txt 2016-11-15 雨 2016-11-16 曇り 2016-11-17 晴れ
今度は、下記のようにsub()を使って、1フィールド(列)目の"-"を"/"に置換して、print出力しています。
$ cat sample2.awk #!/bin/sh cat in.txt | awk ' { sub( "-", "/", $1 ) print $1 , $2 } '
実行すると、最初の"-"のみ"/"に置換されています。
$ ./sample2.awk 2016/11-15 雨 2016/11-16 曇り 2016/11-17 晴れ
基本的にはgsub()を使う場合の方が多い印象がありますが、違いを抑えておいて使い分けて行くと良いと思います。