【发布时间】:2014-12-17 16:46:06
【问题描述】:
我喜欢定义一个包装现有 awk 命令的新命令,例如 print。但是,我不想使用函数:
#wrap command with function
function warn(text) { print text > "/dev/stderr" }
NR%1e6 == 0 {
warn("processed rows: "NR)
}
相反,我喜欢定义一个可以不带括号调用的新命令:
#wrap command with new command ???
define warn rest... { print rest... > "/dev/stderr" }
NR%1e6 == 0 {
warn "processed rows: "NR
}
我可以想象的一个解决方案是使用预处理器,并且可以很好地设置 awk 脚本的 shebang 以调用此预处理器,然后调用 awk。不过,我更希望有一个纯粹的 awk 解决方案。
注意:该解决方案也应该适用于我使用的mawk,因为它比 vanilla GNU/awk 快得多。
更新:讨论表明gawk (GNU/awk) 可以非常快,并且不需要mawk。
【问题讨论】:
-
鉴于功能路线的简单性以及预处理/等的可能相对复杂性。这真的值得吗?
-
也许你是对的,但我一直在寻找(简单的)方法来编写更具可读性的代码。我在这里的目标不是一个非常老套的解决方案。
标签: shell macros awk command mawk