スポンサーリンク

n番目に出現した文字列を置換

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

awkのgensubは、gsub()やsub()と異なり、n番目に出現した文字列を置換することができます。
(nを指定できる)

参考:awkの文字列置換関数gsub()の使い方
参考:awkのsub()で文字列置換する

入力文字列に対して、n番目に出現した置換対象文字列を置換文字列で置換します。

r = gensub( 置換対象文字列, 置換文字列, n, 入力文字列 )

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

$ cat in.txt 
2017-12-16 雨
2017-12-17 曇り
2017-12-18 晴れ

下記がサンプルコードになります。
1回目に出現した"-"を"/"に置換します。
$ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	{		
		r = gensub( "-", "/", 1, $0 )
		print r
	}
'

下記が実行結果になります。
$ ./sample.awk 
2017/12-16 雨
2017/12-17 曇り
2017/12-18 晴れ

2回目に出現した"-"を"/"に置換します。
$ cat sample3.awk 
#!/bin/sh
cat in.txt | awk '		
	{
		r = gensub( "-", "/", 2, $0 )
		print r
	}
'

下記が実行結果になります。
$ ./sample2.awk 
2017-12-16 雨
2017-12-17 曇り
2017-12-18 晴れ

スポンサーリンク

入力文字列自体は置換されない。戻り値に置換後の文字列が返る

入力文字列自体は置換されず、戻り値に置換後の文字列が返ることに注意が必要です。

下記がサンプルコードになります。

$ cat sample2.awk 
#!/bin/sh
cat in.txt | awk '		
	{
		gensub( "-", "/", 1, $0 )
		print $0
	}
'

下記が実行結果になります。
$0自体は置換されないことが確認できます。
$ ./sample2.awk 
2017-12-16 雨
2017-12-17 曇り
2017-12-18 晴れ

全ての文字列を置換する場合には、引数にgを設定する

ほぼ、機能的にはgsub()と近くなります。
全ての文字列を置換する場合には、引数にgを設定します。

参考:awkの文字列置換関数gsub()の使い方

下記がサンプルコードになります。

$ cat sample4.awk 
#!/bin/sh
cat in.txt | awk '		
	{
		r = gensub( "-", "/", "g", $0 )
		print r		
	}
'

下記が実行結果になります。
$ ./sample4.awk 
2017/12/16 雨
2017/12/17 曇り
2017/12/18 晴れ

スポンサーリンク