想要一个实现'@include'的AWK

时间:2013-04-20 00:31:08

标签: windows awk

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

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

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

在此期间,解决方案也会有所帮助。 (说一个预先测试过的awk includer程序??)

TIA ,      将

4 个答案:

答案 0 :(得分:7)

据我所知,gawk本身不支持@include个文件,直到4.x.但是,至少在Linux上,它附带了一个名为igawk的shell脚本,您可以使用它;它预处理awk脚本并用包含文件的内容替换@include s(通过$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中的原生@include需要包含文件名的带引号的字符串; igawk带有一个单词,如果你引用它,会尝试在其名称中找到带引号的文件。

答案 1 :(得分: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程序参数

希望这可能会有所帮助。

  • MD

答案 2 :(得分:0)

检查unixtools - 看起来它会对你进行排序。祝你好运......

答案 3 :(得分:0)

您可以尝试runawk

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

http://sourceforge.net/projects/runawk

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