awk:如果用户定义的函数返回 1,请从头开始



假设我有以下脚本:

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

最新更新