awkには標準関数で、文字列を置換する関数gsub()が用意されています。
とても便利な関数なので紹介してみたいと思います。

スポンサーリンク

gsub()の使い方

下記の書式で、入力文字列を入力として、置換対象文字列を置換文字列に置換します。
gsub(置換対象文字列, 置換文字列, 入力文字列)

例えば、1フィールド(列)目の文字列”-“を”/”に置換したい場合は、下記のように書きます。

この時、入力文字列変数の$1は直接置換されてしまいますので、注意が必要です。
置換対象文字列の指定には正規表現も使えます。

サンプルコード

それではサンプルコードです。
in.txtは下記の用に、日付と天気が書かれています。

sample.awkには、1レコード(行)ずつ読み込んで、1フィールド(列)目の文字列”-“を”/”に置換しています。
そして、置換した1フィールド(列)目と2フィールド(列)目をprint出力しています。

実行すると、下記のように”-“が”/”に置換されています。

スポンサーリンク

gsub()は正規表現を使って置換もできる

gsub()は正規表現を使うこともできます。

例えば、下記のようにin.txtがあったとします。

下記のように、1レコード(行)ずつ読み込んで、数字を空文字に置換します(数字を削除することになります)。
0~9の数字は、正規表現で[0-9]と表現できます。

下記が実行結果になります。数字が空文字に置換されて、数字が削除さているのが確認できます。

スポンサーリンク

gsub()で先頭と語尾の文字列を置換したい場合

例えば、ファイルの行の先頭や語尾にゴミデータがあり、それを削除したい場合があると思います。

先頭や語尾も、正規表現で指定できますので、gsub()でうまく削除できることが多いです。

下記に参考記事を書いていますので、良ければ参照してみてください。
awkで先頭・語尾の文字列置換をしたい時は、正規表現とgsub()で解決

awkのgsub()とsub()の違いは?

置換関数としてgsub()の他にsub()がawkにはあります。

awkのgsub()とsub()の違いは置換回数の回数制約にあります。

gsub()は全ての置換対象文字列を置換、sub()は最初の置換対象文字列一回のみ置換します。

下記に参考記事を書いています。よければ参照してください。

参考:awkのgsub()とsub()の違いは置換回数の回数制約

スポンサーリンク