3

在寻找正确修剪文本字符串的快速方法时,我发现了以下 wiki 页面:

Wiki 修剪页面

在关于 AWK 的章节中,它给出了 2 组示例:

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 中工作 - 那么它是在更新版本中引入的吗?

如果有人熟悉这种语法,我将不胜感激一个真实的工作示例。

4

2 回答 2

2

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

identifier(parameter) = ...

不适用于我测试过的任何变体:GNU awk(3、4 - 目前最新的),AT&T Bell 的 awkmawk

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

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

于 2011-12-08T11:41:14.297 回答
0

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

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

于 2011-12-08T12:17:04.013 回答