fed*_*qui 7 awk gnu pretty-print
我经常发现自己写的Awk单行代码随着时间的流逝变得越来越复杂。
我知道我总是可以创建一个Awk文件来继续添加用例,但是它肯定不如在命令行上更改文本有用。
为此:有什么方法可以漂亮地打印Awk的代码,从而使我更有意义?
例如,鉴于此:
awk 'flag{ if (/PAT2/){printf "%s", buf; flag=0; buf=""} else buf = buf $0 ORS}; /PAT1/{flag=1}' file
Run Code Online (Sandbox Code Playgroud)
如何获得更具可读性的内容?
埃德·莫顿(Ed Morton)向我展示了 GNU awk -o可以进行漂亮的打印:
-o [文件]
--pretty-print [=文件]启用awk程序的漂亮打印。暗示
--no-optimize。默认情况下,输出程序是在一个名为awkprof.out(请参阅Profiling)的文件中创建的。可选的file参数使您可以为输出指定其他文件名。不允许有空格之间-o和文件,如果文件被提供。注意:过去,此选项也会执行您的程序。这已不再是这种情况。
因此,此处的关键是将结合使用-o:
- 使输出在stdout中。file将输出存储在名为file的文件中。现场观看:
$ gawk -o- 'BEGIN {print 1} END {print 2}'
BEGIN {
print 1
}
END {
print 2
}
Run Code Online (Sandbox Code Playgroud)
要么:
$ 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
}
Run Code Online (Sandbox Code Playgroud)