スポンサーリンク

特定の行の文字列を置換

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

※MACターミナル(BSD系)での動作確認です。

特定の行の文字列を置換するには、NR変数とgsub()を組み合わせると簡単です。
参考:awkのNR変数で行数に応じた処理をする

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

$ cat in.txt 
id1,ls
id2,cat
id3,printf
id4,print
id5,mkdir

下記がサンプルコードになります。
3~4行目の i を k に置換しています。
$ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	{
		if(3 <= NR && NR <= 4){
			gsub("i", "k", $0)
		}
		print $0
	}
'

下記が実行結果になります。
$ ./sample.awk 
id1,ls
id2,cat
kd3,prkntf
kd4,prknt
id5,mkdir

スポンサーリンク

行と列を指定して文字列を置換する

行と列を指定して文字列を置換するには、列変数、NR変数とgsub()を組み合わせるとできます。

下記がサンプルコードになります。
3~4行目の2列目の i を k に置換しています。
参考:awkのFS変数で区切り文字を設定
参考:awkのOFS変数で出力の区切り文字を設定する方法

$ cat sample2.awk 
#!/bin/sh
cat in.txt | awk '
	BEGIN{
		FS = ","
		OFS = ","
	}
	{
		if(3 <= NR && NR <= 4){
			gsub("i", "k", $2)
		}
		print $0
	}
'

下記が実行結果になります。
$ ./sample2.awk 
id1,ls
id2,cat
id3,prkntf
id4,prknt
id5,mkdir

スポンサーリンク