6

在 gawk 手册中,我描述了一个@include运算符。这使您可以制作 .awk 模块和共享脚本等。包含文件。

到目前为止,我发现 Windows 的最新 cgywin、mingw 和 gnu awk-s(awk、gawk、mawk、nawk,...)在第一个失败:@include声明。

有人可以指出一个为 Windows 实现整个 nawk 或 awk 实现的版本吗?我很确定至少有一个 nawk,早在那天,我们已经下载了运行 Windows NT。

在此期间,另一种解决方法会有所帮助。(比如说一个预先测试过的 awk 包含程序??)

蒂亚,威尔

4

4 回答 4

8

据我所知,@includegawk 在 4.x 之前不支持文件。但是,至少在 Linux 上,它附带了一个名为的 shell 脚本igawk,您可以使用它来代替;它预处理 awk 脚本并将@includes 替换为包含文件的内容(通过 找到$AWKPATH)。也许 Cygwin 也有这个脚本?

$ cat foo.awk
@include bar.awk
$ cat bar.awk
BEGIN {print "Hello, world!" }
$ awk -f foo.awk
awk: foo.awk:1: @include bar.awk
awk: foo.awk:1: ^ invalid char '@' in expression
$ gawk -f foo.awk
gawk: foo.awk:1: @include bar.awk
gawk: foo.awk:1: ^ invalid char '@' in expression
$ igawk -f foo.awk
Hello, world!

但是请注意,这igawk和 gawk 4 的@include语法不兼容。gawk 4 中的 native@include需要一个带引号的字符串作为包含的文件名;igawk's 是一个裸词,如果你引用它,它会尝试查找名称中带有引号的文件。

于 2013-04-20T00:49:39.170 回答
1

你可以试试runawk

RunAWK 是 AWK 解释器的小型包装器,可帮助在 AWK 中编写独立程序。它提供对模块和其他强大功能的支持。它带有几十个模块,这些模块提供了处理命令行选项的有效方法、操作字符串和数组的强大功能以及排序、数学、tmpfile、braceexpand 函数和许多其他函数。

http://sourceforge.net/projects/runawk

http://awk.info/?tools/runawk

于 2013-04-20T16:11:07.993 回答
1

如果您想坚持使用标准 awk,请执行以下操作。

创建您的库 awk 文件,我们将其命名为 myawklib.awk。在库文件中,有您的 awk 程序语句。不要包括 BEGIN 和 END 块。不要包含 BODY 块,除非您知道自己在做什么。只有库函数。

您可以在命令行上运行:

awk -f myawklib.awk -f main.awk program_arguments

awk -f myawklib.awk -f another_main.awk 程序参数

希望这可能会有所帮助。

  • 医学博士
于 2014-12-04T06:33:05.710 回答
0

检查unixtools——它看起来会为你排序。祝你好运...

于 2013-04-20T00:54:47.237 回答