bash:使用gawk在模式后插入一行

时间:2016-09-28 09:54:08

标签: bash awk gawk

我正在尝试使用gawk在Pattern之后插入一行。 比方说,文件aa包含

11
22
33
11
22
33

我使用gawk仅在第22个之后插入222,即在插入之后,我的aa文件将包含:

11
22
222
33
11
22
33

但是,如果我使用:

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

文件aa包含:

11
22
222
33
11
222
33

(我不希望第二次更换22乘222,并希望保留22原样,不再插入,我,e,。在第22次之后仅插入222次。 请帮忙。

3 个答案:

答案 0 :(得分:2)

MediaExtractor

说明:

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

答案 1 :(得分:2)

您可以使用:

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

我检查一行是否只包含22,以及是否未设置标记f。在这种情况下,我将标志设置为1,打印当前行和222

答案 2 :(得分:1)

请改用此代码:

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

如果值22在变量中:在awk中,您无法使用/constantRegex/
你需要使用~

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