runawk是一个很小的包装AWK解释器impements模块系统,并帮助编写独立AWK程序。
动机
经过多年的使用AWK进行编程的我发现,尽管
它的简单性和局限性AWK对于脚本足够宽的好
且具有不同的任务。 AWK并不像飞机的强大动力作为其做大
同行如Perl,Ruby的,TCL等,但它有自己的
像紧凑,几乎所有的简单性和可用性优势
UNIX类系统。我个人也很喜欢它的数据驱动的性质,
令牌的方向,对于简单的文本处理非常有用的技术
公用事业。
但是!不幸的是awk的解释缺乏一些重要的功能和
有时工作不是那么好,因为它是对子级。
有些问题,我看到(有些当然他们,)。
1)AWK缺乏对模块的支持。即使我创建的小程序,我
经常要使用以前创建的功能,已经被用于
其他脚本。也就是说,大对子级到orginise功能于
所谓库(模块)。
2)为了参数传递给#!的/ usr / bin中/的awk -f脚本(不AWK
解释器),有必要prepand列表
论点 - (二减SIGNES)。在我看来,这看起来很糟糕。
示例:
awk_program:
    #!的/ usr / bin中/的awk -f
   开始{
      对于(i = 1; I
       }
    }
shell会话:
    %awk_program --opt1 --opt2
   的/ usr / bin中/ AWK:未知选项--opt1忽略
   的/ usr / bin中/ AWK:未知选项--opt2忽略
    %awk_program - --opt1 --opt2
    ARGV [1] = - OPT1
    ARGV [2] = - OPT2
    %
在我看来awk_program脚本应该是这样的(就像
正常程序办)
    %awk_program --opt1 --opt2
    ARGV [1] = - OPT1
    ARGV [2] = - OPT2
    %
它使用runawk是可能的。
3)当#!的/ usr / bin中/的awk -f脚本处理的参数(选项),并希望
从标准输入读取,就必须增加
为/ dev /标准输入(或' - ')作为一个明确地定义最后一个参数。
示例:
awk_program:
    #!的/ usr / bin中/的awk -f
   开始{
      如果(ARGV [1] ==“--flag”){
         标志= 1
          ARGV [1] =“”#不要看文件名为“--flag”
       }
    }
    {
      打印“标志=”标志“$ 0 =”0美元
    }
shell会话:
    %echo测试| awk_program - --flag
    %echo测试| awk_program - --flag的/ dev /标准输入
   标志= 1 $ 0 =测试
    %
理想情况下awk_program应该像这样工作
    %echo测试| awk_program --flag
   标志= 1 $ 0 =测试
    %
所有这些probles由runawk解决,这就是为什么我写的。
我还包括了几个模块来runawk分布,是
对我有用,我希望这将是对你也有帮助。
安装
0)BSD化妆是必要的。我的名字,它只是'做',但它真正的名称可能
  不同群组。 B进行和pmake是可能的名字。
  如果您需要更改默认的建设方案,
  运行make这样的
&NBSP;&NBSP;&NBSP;&NBSP; ENV [YOUR_ASSIGNMENTS]让<目标>
&NBSP;&NBSP;见下面的例子节
1)你已经下载了这样的压缩包解压缩
&NBSP;&NBSP; GZIP -dc runawk-X-Y-Z.tar.gz |焦油-xf-
2)CD runawk-X-Y-Z
3)使
4)(可选!)make install的 - 迪尔斯
5)制作安装
有很多的Makefile变量可以期间改变
。安装&NBSP; Runawk自己的变量(所有他们在开始时
Makefile文件):
&NBSP;前缀NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; - 其中runawk被安装到
&NBSP;&MODULESDIR NBSP;&NBSP;&NBSP;&NBSP; - 在模块安装目录
&NBSP;&AWK_PROG NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; - 路径AWK解释
&NBSP; STDIN_FILENAME - 路径标准输入设备文件
BSD make的变量(最常用的,
对于所有其他 - 看化妆的文档和文件的.mk)
&NBSP; BINDIR - 在runawk可执行文件本身被安装到
&NBSP; MANDIR - 在手册页安装到
&NBSP; BINOWN - runawk可执行老板
&NBSP; BINGRP - runawk可执行组
&NBSP; MANOWN - 手册页主人
&NBSP; MANGRP - 手册页组
示例:
&NBSP;&NBSP; ENV CC = gcc的
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; PREFIX = /家庭/ cheusov /本地
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; LDFLAGS =“ - L / USR /包装/ lib中-Wl,-rpath -Wl是/ usr /包装/ lib目录”
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; LDADD = -lextralib
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; CFLAGS =“ - Werror -Wall”
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; CPPFLAGS = -I的/ usr /包装/包括
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; BINOWN = cheusov
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; BINGRP =用户
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; MANOWN = cheusov
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; MANGRP =用户
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; MKCATPAGES =无
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;让-s所有安装,安装的dirs
什么在此版本中是新的:
- 在选项-i,-I,和所有的长选项被完全删除。
- 选项-T加入了标签输入。
- 在-v记录在手册页的选项。
- 修正的GCC编译警告。
- 在修复编译与非空MAKEOBJDIR。
- 在NEW,runcmd.awk和手册页错字修复。
什么在1.4.4版本新:
- 在一个临时目录中删除子目录中的错误是固定的。
- 在改进runawk_modules.3。
什么是1.4.3版本,新的:
- 在paexec(1)不使用系统( 3)再进行删除临时目录。
- 在功能print_help()从power_getopt.awk模块移到init_getopt.awk。
什么是1.4.2版本,新的:
- 在这个版本增加了runawk_modules.3,所有模块据可查,不赞成长选项,删除-i和-I选项,包括手册页分发包等pod2man将不需要的建设。
什么在1.4.0版本新:
- 在exitnow.awk的exitnow(状态)函数现在完成的脚本执行不运行END部分即使状态== 0。
- 在新的模块io.awk包括功能,确保对方{文件,目录,EXEC,插座,FIFO,blockdev,chardev,符号链接},FILE_SIZE和FILE_TYPE。 tokenre.awk有新的功能splitre0()。
什么版本1.3.2的新:
- 在内部阵列现在可以自动搬迁。此修复结合使用runawk(1)与xargs的(1),如猫files.txt |。xargs的runawk -e'...'
什么版本1.3.0的新:
- 在为英特尔C编译器警告消息的修复。
- 在该函数shquote(A修复)。
- 在该项目的源代码已经进行了重组,从而使一个易于安装的任何子项目:实例,模块,runawk,alt_getopt和DOC(TODO,README等文件)
从模块/ shquote.awk
什么在1.1.0版本新:
- 系统-F选项加入李。 >
- 在新ord.awwas ftrans_in.awk和glob.awk模块都包括在内。
- 在一个新的alt_getopt可执行文件包含用于解析shell脚本短期和长期的选项。
- 在新MIN3,min4,min5,min_key,MIN_VALUE和key_of_min_value(min.awk)和MAX3,MAX4,MAX5,max_key,MAX_VALUE和key_of_max_value提供了(max.awk)功能。
- 在新的样本加入:例子/ demo_minmax,例子/ demo_tokenre3,例子/ demo_ftrans,例子/ demo_glob *
- 在一个新的功能中添加了multisub.awk。
- 在小的改进是安装过程中进行。
什么是0.16.0版本,新的:
- 在创建大量的演示程序对于大多数runawk模块与它们在实施例/子目录现在。新MEGA模块;-)power_getopt.awk查看文档和演示程序的例子/ demo_power_getopt。它使选项处理很容易。新模块:embed_str.awk has_suffix.awk has_prefix.awk readfile.awk modinfo.awk小幅修正和改进dirname.awk和basename.awk。现在,他们都与目录名(1)和基名完全兼容(1)RUNAWK设置以下环境变量为孩子AWK子:RUNAWK_MODC - 一个数字模块(-f文件名)传递给AWK RUNAWK_MODV_ - 完整路径模块#N ,其中n是在[0..RUNAWK_MODC)的范围。 RUNAWK设置RUNAWK_ART_STDIN环境变量为孩子AWK子为1,如果附加/人工' - '添加到列表中awk的参数。 Makefile中:B进行主义被拆除。现在的Makefile与FreeBSD的化妆完全兼容。 CLEANFILES目标是用手工制作的规则小调修复,而不是'test_all“目标
评论没有发现