AWK用户定义的函数 - 一种新的语法?

时间:2011-12-08 10:56:54

标签: awk gawk

在寻找快速修剪文本字符串的方法时,我找到了以下维基页面:

Wiki trimming page

在关于AWK的章节中,它提供了两组示例:

ltrim(v) = gsub(/^[ \t]+/, "", v)

rtrim(v) = gsub(/[ \t]+$/, "", v)

trim(v)  = ltrim(v); rtrim(v)

function ltrim(s) { sub(/^[ \t]+/, "", s); return s }

function rtrim(s) { sub(/[ \t]+$/, "", s); return s }

function trim(s)  { return rtrim(ltrim(s)); }

下面的例子是完全熟悉的并且工作正常,但是第一个例子看起来与我在20年的AWK编程中看到的任何东西都不同。它看起来像是在一行中定义和使用函数的一种非常有用的快速方法。我无法在GNU Awk 3.1.5中使用这种语法 - 所以它是在更新版本中引入的吗?

如果有人熟悉这种语法,我会感激一个真实的例子。

2 个答案:

答案 0 :(得分:1)

我想这个例子是错的。 语法

identifier(parameter) = ...

不适用于我测试的所有变种: GNU awk (3,4,目前最新的), AT& T Bell的awk mawk

就像调用未定义的函数一样,也会产生预期的错误。

也许作者只想用伪代码说明这个想法?

答案 1 :(得分:0)

我的理解是第一组示例没有定义函数,只是说明(缺少)ltrim(s)函数可以被gsub(/^[ \t]+/, "", v)等替换。

顺便说一句,gsub是不必要的,sub就像在函数替代中一样。