2016-09-28 1 views
0

gawkを使用してパターンの後に行を挿入しようとしています。私が使用している場合、bash:gawkを使用してパターンの後に行を挿入します

11 
22 
222 
33 
11 
22 
33 

をしかし: aa私はすなわち挿入後、最初の22の後に222を挿入するためのgawkを使用してい

11 
22 
33 
11 
22 
33 

を含むファイル、のは言ってみましょう、私のAAファイルが含まれています:

gawk -v nm=222 '/22/ {if (done++ == 0) print;print nm;next}1' aa 

ファイルaaが含まれています

11 
22 
222 
33 
11 
222 
33 

(私は22で22の2番目の置換を望んでいないし、22をそのまま保持したい、そしてそれ以上の挿入、i、e、を保持したくない。最初の22の後に222を一度挿入してください。 助けてください。

+1

'gawk -v nm = 222 '/ 22/{if(done ++ == 0){print; nm; next}} 1'' – 123

+0

変数として22も使いたいですか?例えばgawk -v nm1 = 22 -v nm2 = 222 '/ nm1/{if(done ++ == 0){印刷; nm2;次}} 1' –

+0

'$ 0〜nm1 {do stuff}' – 123

答えて

2
$ awk '1; $1==nm2 && !a++ {print nm1}' nm1=222 nm2=22 file 
11 
22 
222 
33 
11 
22 
33 

説明:

$ cat script.awk 
1     # print the line 
$1==nm2 && !a++ { # if $1 is exactly the desired and a counter hasn't been touched yet 
    print nm1  # print parameter nm2 
} 
+1

downvotingのときはコメントするのが通例です。 –

+0

私はdownvoteしませんでした。コードは正しいですが、たぶん説明を追加するだけです。 – hek2mgl

1

使用、代わりにこのコード:

gawk -v nm=222 '/22/ {if (done++ == 0){print;print nm;next}};1' aa 

値22が変数である場合:/constantRegex/を使用することはできませんawkに、あなたが使用する必要が
~

sel=22 
gawk -v nm=222 -v sel="$sel" '($0~sel) {if (done++ == 0){print;print nm;next}};1' aa 
+0

私はどうしますか?変数として22を入れる? –

+0

@ Dr.DebasishJana編集を確認してください。 – sorontar

2

あなたはこれを使用することができます:行のみ22が含まれている場合は、フラグfが設定されていない場合、私がチェックしてる

awk '/^22$/ && !f {f=1; print; print "222"; next} 1' aa.txt 

。その場合、フラグを1に設定し、現在の行を出力します。222

関連する問題