awk:神秘的双线打印

jod*_*ods 2 bash awk

我有一个$ FILE

1 textline1
1 textline2
1 textline3
1 textline4
Run Code Online (Sandbox Code Playgroud)

我想搜索textline3并进行求和:1stcolumn + 1

Linenumber是:

lnr=$(grep -n textline3 $FILE | cut -d : -f1)
Run Code Online (Sandbox Code Playgroud)

但是当我使用awk时:

awk -v l="$lnr" 'FNR==l{ sub($1,$1 + 1); print }1' $FILE
Run Code Online (Sandbox Code Playgroud)

我得到了错误(第3行是双重打印)

1 textline1
1 textline2
2 textline3
2 textline3
1 textline4
Run Code Online (Sandbox Code Playgroud)

P..*_*... 7

双重打印的原因是,您在{}内打印并使用1.1表示true,awk的默认行为是打印.

awk -v l="$lnr" 'FNR==l{ sub($1,$1 + 1)}1' $FILE
Run Code Online (Sandbox Code Playgroud)