特定の行の文字列を置換
※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
