假设我有以下脚本:
function helper1() {
if (NR==3 && !/PATTERN/) {
return 1
} else {
if (NR>=13) {
print $0
}
return 0
}
}
BEGIN {
if (helper1() == 1) {
print $0
}
}
这意味着,我有一个用户定义的帮助程序函数,它检查一个文件是否第 3 行包含一些 PATTERN,如果这是真的,那么它会打印出从第 13 行开始的所有其他行。
但是,如果它不是真的(辅助函数返回 1(,那么我想 awk 打印从第 1 行开始的所有行。这不会:)
如有任何建议,将不胜感激,
谢谢。
您可以使用此awk
:
awk 'NR < 3 { # for first 2 lines
s = s $0 ORS # store all lines in a variable s
next # skip to next record
}
NR == 3 { # for record number 3
if (/PATTERN/) # if PATTERN is found
p = 1 # set flag p to 1
else # else
printf "%s", s # print first 2 lines
}
(p && NR >= 13) || !p # print if flag is not set or else if NR >= 13
' file
使用函数:
awk '
function helper1() {
if (NR < 3) {
s = s $0 ORS
return 0
}
else if (NR == 3) {
if (/PATTERN/)
p = 1
else
printf "%s", s
}
return (p && NR >= 13) || !p
}
helper1()
' file