awkには文字列置換の関数gsub()が用意されていて、正規表現も使えます。
先頭と語尾を指定しての文字列置換はよく使うので、紹介してみたいと思います。
スポンサーリンク
gsub()の使い方
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
下記の書式で、入力文字列を入力として、置換対象文字列を置換文字列に置換します。
gsub(置換対象文字列, 置換文字列, 入力文字列)
第一引数の置換対象文字列は、/正規表現/の形式でで設定することもできます。
先頭文字列の置換には"^"の正規表現を指定
例えば、先頭文字列が"2017"の場合に"2016"に置換したい場合は、下記のように書きます。
^2017とあれば、先頭文字列が"2017"の意味になります
gsub( /^2017/, "2016", $1 )
サンプルコード
下記のように、in.txtがあったとします。
$ cat in.txt 20172017 20172017 20172017
sample.awkには、1レコード(行)ずつ読み込んで、1フィールド(列)目の先頭文字列の"2017"を"2016"に置換します。
そして、置換された1フィールド(列)目をprint出力しています。
$ cat sample.awk #!/bin/sh cat in.txt | awk ' { gsub( /^2017/, "2016", $1 ) print $1 } '
実行すると先頭の文字列"2017"のみ置換されています。
$ ./sample.awk 20162017 20162017 20162017
スポンサーリンク
語尾の置換には"$"の正規表現を指定
例えば、語尾が"2017"の場合に"2016"に置換したい場合は、下記のように書きます。
2017$とあれば、語尾が"2017"の意味になります
gsub( /2017$/, "2016", $1 )
サンプルコード
下記のように、in.txtがあったとします。
$ cat in.txt 20172017 20172017 20172017
sample2.awkには、1レコード(行)ずつ読み込んで、1フィールド(列)目の語尾が"2017"の場合には"2016"に置換します。
$ cat sample2.awk #!/bin/sh cat in.txt | awk ' { gsub( /2017$/, "2016", $1 ) print $1 } '
実行すると、語尾の"2017"のみ置換されています。
$ ./sample2.awk 20172016 20172016 20172016
スポンサーリンク