2016-09-28 26 views
0

我试图在使用gawk的模式之后插入一条线。 比方说,文件aa包含bash:在使用gawk的模式之后插入一条线

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 ,.在222之后只插入一次222。 请帮忙。

+1

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

+0

我想用22作为变量呢?例如gawk -v nm1 = 22 -v nm2 = 222'/ nm1/{if(done ++ == 0){print; print nm2; next}} 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

在投票时,通常会发表评论。 –

+0

我没有downvote。代码是正确的,可能你应该只是添加一个解释。 – hek2mgl

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 
+0

我想把22作为一个变量? –

+0

@ Dr.DebasishJana检查编辑。 – sorontar

2

您可以使用此:

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

我检查,如果行仅包含一个22如果标志f没有设置。在这种情况下,我将标志设置为1,打印当前行和222

相关问题