是否可以漂亮地打印 awk 的代码?



我经常发现自己在写Awk单行代码,随着时间的推移变得越来越复杂。

我知道我总是可以创建一个 Awk 文件来继续添加用例,但它肯定不如在命令行上更改文本那么有用。

为此:有什么方法可以漂亮地打印 Awk 的代码,这样我就可以更有意义?

例如,给定此:

awk 'flag{ if (/PAT2/){printf "%s", buf; flag=0; buf=""} else buf = buf $0 ORS}; /PAT1/{flag=1}' file

我怎样才能得到一些更具可读性的东西?

Ed Morton 向我展示了 GNU awk 具有-o漂亮的打印选项:

GNU Awk 用户指南,关于选项

-o[文件]--漂亮打印[=文件]

启用 awk 程序的漂亮打印。暗示--no-optimize.缺省情况下,输出程序是在名为awkprof.out的文件中创建的(请参见性能分析)。可选的file参数允许您为输出指定不同的文件名。如果提供了文件,则-o文件之间不允许有空格。

注意:在过去,此选项也会执行您的程序。情况已不再如此。

所以这里的关键是使用-o,与:

  • 如果我们希望输出自动存储在"awkprof.out"中,则没有任何内容。
  • -将输出放在标准输出中。
  • file将输出存储在名为file的文件中。

现场观看:

$ gawk -o- 'BEGIN {print 1} END {print 2}'
BEGIN {
print 1
}
END {
print 2
}

或:

$ gawk -o- 'flag{ if (/PAT2/){printf "%s", buf; flag=0; buf=""} else buf = buf $0 ORS}; /PAT1/{flag=1}' file
flag {
if (/PAT2/) {
printf "%s", buf
flag = 0
buf = ""
} else {
buf = buf $0 ORS
}
}
/PAT1/ {
flag = 1
}

最新更新