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 プログラミングで見たものとは異なって見えます。関数を 1 行で定義して使用するための非常に便利な簡単な方法のように見えます。この構文を GNU Awk 3.1.5 で動作させることができません。これは、より最近のバージョンで導入されたものですか?

誰かがこの構文に精通している場合、実際に機能する例に感謝します。

4

2 に答える 2

2

この例は間違っていると思います。構文

identifier(parameter) = ...

私がテストしたどのバリアントでも動作しません: GNU awk (3、4 - 現時点では最新)、AT&T Bell の awkおよびmawk

未定義の関数を呼び出すと、予想どおりエラーが発生するのと同じです。

おそらく、作成者は疑似コードを使用してアイデアを説明したかっただけでしょうか?

于 2011-12-08T11:41:14.297 に答える
0

私の理解では、最初の一連の例は関数を定義していませんが、(欠落している)関数をなどltrim(s)に置き換えることができることを示しているだけです。gsub(/^[ \t]+/, "", v)

ちなみにgsubは不要ですが、関数の代替のようにsubで十分です。

于 2011-12-08T12:17:04.013 に答える