awkには文字列置換の関数gsub()が用意されていて、正規表現も使えます。
先頭と語尾を指定しての文字列置換はよく使うので、紹介してみたいと思います。

スポンサーリンク

gsub()の使い方

※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

スポンサーリンク