我想匹配每一个空行,当它是一个空行时,我想转到下一行。 问题是当我输入
时/^$/ { next }
它总是给我一个语法错误。它总是指第一个' {'。我认为这是正确的语法。有人可以帮帮我吗?
我的剧本:
BEGIN{
FS=" "
matching=0
num=0
}
{
/^$/ { next }
if(matching==1 && num>=NF){
print("")
matching=0
}
if(match($NF,type)>0){
for(i=1;i<=NF;i++){
printf($i)
}
printf("\n")
num=NF
matching=1
next
}
if(matching==1){
for(i=1;i<=NF-num;i++){
printf(" ")
}
printf($NF)
printf("\n")
}
}
END{
}
这是我的剧本
答案 0 :(得分:4)
您正尝试在 pattern {action}
块中使用的{action}
语法。
您需要将/^$/ {next}
行移到第6行开始的操作块之外(通过将其移动到该开头 {上方来获得您想要的内容。或者使用{ {1}}动作块中的样式匹配。
你的剧本:
if
答案 1 :(得分:4)
您的脚本有几个问题,如下所示:
BEGIN{
FS=" "
matching=0 # No need to init variables to zero, this is default behavior.
num=0 # Ditto.
}
{
/^$/ { next } # You can't just use "condition { action }" when you're already
# inside an awk action block. Move this outside of the action
# block or change it to "if (/^$/) { next }"
if(matching==1 && num>=NF){
print("") # print is a builtin not a function. Just do print "".
matching=0
}
if(match($NF,type)>0){
for(i=1;i<=NF;i++){
printf($i) # printf is a builtin, not a function and NEVER put input data
# where the printf formatting string should be. Change this to
# printf "%s", $i
}
printf("\n") # print ""
num=NF
matching=1
next
}
if(matching==1){
for(i=1;i<=NF-num;i++){
printf(" ") # printf " "
}
printf($NF) # printf "%s", $NF
printf("\n") # print ""
}
}
END{ # unused and unnecessary, remove this section.
}
我怀疑如果您发布了一些示例输入和预期输出,我们可以帮助您编写更好(更简洁,更具风格)的脚本。