44、gawk安装与配置全解析

gawk安装与配置全解析

1. 配置过程

如果你对使用C语言和类Unix操作系统有所了解,那么这部分内容会很有用。gawk的源代码通常会尽可能遵循正式标准,这意味着gawk使用的是ISO C标准和POSIX操作系统接口标准指定的库例程,其源代码需要使用ISO C编译器(1990标准)。

许多Unix系统并不完全支持ISO或POSIX标准,gawk发行版中的 missing_d 子目录包含了那些最可能缺失的函数的替代版本。

configure 创建的 config.h 文件包含了描述你尝试编译gawk的特定操作系统特性的定义,具体描述了以下三方面内容:
- 可用的头文件,以便正确包含它们。
- 你的C库中实际可用的(所谓)标准函数。
- 关于你的操作系统的各种杂项信息。

例如,如果 stat 结构中没有 st_blksize 元素,那么 ‘HAVE_STRUCT_STAT_ST_BLKSIZE’ 将未定义。

你的C编译器可能会向 configure 提供错误信息,它可能在库函数不可用时不报错退出。为了解决这个问题,可以编辑 custom.h 文件。使用适合你系统的 #ifdef ,并定义 configure 应该定义但未定义的常量,或者取消定义 configure 定义了但不应该定义的常量。 custom.h 文件会被 config.h 文件自动包含。

此外,Autoconf生成的 configure 程序可能在你的系统上无法正常工作。如果遇到问题, configure.ac 文件是Autoconf的输入,你可以修改这个文件并生成一个能在你系统上工作的新 configure 版本。

graph TD
    A[开始配置] --> B[检查ISO和POSIX标准支持]
    B --> C{支持全部标准?}
    C -- 是 --> D[使用标准库例程]
    C -- 否 --> E[使用missing_d子目录中的替代函数]
    D --> F[运行configure生成config.h]
    E --> F
    F --> G{编译器是否报错?}
    G -- 是 --> H[处理错误]
    G -- 否 --> I[检查custom.h文件]
    H --> I
    I --> J{是否需要修改configure.ac}
    J -- 是 --> K[修改configure.ac并重新生成configure]
    J -- 否 --> L[完成配置]
    K --> L
2. 在PC操作系统上的安装

这部分涵盖了在运行MS-DOS和任何版本MS-Windows的英特尔架构机器上安装和使用gawk的内容。“Windows32”指的是Microsoft Windows 95/98/ME/NT/2000/XP/Vista/7/8。

由于MS-DOS(以及其他操作系统下的MS-DOS shell)的限制,各种“DOS扩展程序”经常与gawk等程序一起使用。Microsoft Windows 3.1和Windows32的不同功能也可能会增加复杂性。

2.1 为PC操作系统编译gawk

可以使用DJ Delorie的GNU开发工具(DJGPP:仅适用于MS-DOS)或MinGW(适用于Windows32)为MS-DOS和Windows32编译gawk。gawk发行版中的 README_d/README.pc 文件包含额外说明, pc/Makefile 包含重要的编译选项信息。

编译步骤如下:
1. 将 pc 目录中的文件(除了 ChangeLog )复制到包含gawk其他源代码的目录。
2. 使用适当的目标名称作为参数调用 make 来构建gawk。从 pc 目录复制的 Makefile 包含一个带有注释的配置部分,可能需要进行编辑以适应你的 make 工具。

Makefile 支持多个目标来构建各种MS-DOS和Windows32版本。如果 make 命令不指定目标,会打印出目标列表。例如,要使用DJGPP工具构建gawk,输入 make djgpp (构建所需的DJGPP工具可在 ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/ 找到);要使用MinGW工具构建原生MS-Windows二进制的gawk,输入 make mingw32

2.2 测试gawk

使用 make 运行标准测试并安装gawk需要额外的类Unix工具,包括 sh sed cp 。为了运行测试, test/*.ok 文件可能需要转换为具有通常的MS-DOS风格的行尾标记。或者,运行 make check CMP="diff -a" 以使用GNU diff 的文本模式而不是 cmp 来比较结果文件。

2.3 使用gawk

在MS-DOS和MS-Windows下,Cygwin和MinGW环境支持 |& 运算符和TCP/IP网络。

gawk的MS-DOS和MS-Windows版本按照“AWKPATH环境变量”的描述搜索程序文件,但 AWKPATH 变量中的元素用分号而不是冒号分隔。如果 AWKPATH 未设置或为空,默认搜索路径是 .;c:/lib/awk;c:/gnu/lib/awk

一个类似 sh 的shell(与MS-DOS下的 command.com 或MS-Windows下的 cmd.exe 不同)对于awk编程可能很有用,DJGPP工具集包含了Bash的MS-DOS端口。

在MS-Windows和MS-DOS下,gawk(以及许多其他文本程序)会在输入时将行尾的 \r\n 静默转换为 \n ,在输出时将 \n 转换为 \r\n 。特殊的 BINMODE 变量允许控制这些转换,其解释如下:
| BINMODE值 | 含义 |
| ---- | ---- |
| “r” 或 1 | 读取时设置为二进制模式(即读取时不进行转换) |
| “w” 或 2 | 写入时设置为二进制模式(即写入时不进行转换) |
| “rw” 或 “wr” 或 3 | 读写都设置为二进制模式 |
| 非空字符串 | 等同于 BINMODE=3 (即读写都不进行转换),但如果字符串不是”rw”或”wr”,gawk会发出警告信息 |

标准输入和标准输出的模式仅设置一次(在读取命令行之后,但在处理任何awk程序之前)。通过在命令行上使用适当的 -v BINMODE=N 选项可以设置标准输入或标准输出的 BINMODE BINMODE 在打开文件或管道时设置,中途不能更改。

以下是一些设置二进制模式的示例:
- 设置标准输出和其他文件的写入二进制模式,并将 ORS 设置为通常的MS-DOS风格行尾:
gawk -v BINMODE=2 -v ORS="\r\n" …
或者
gawk -v BINMODE=w -f binmode2.awk …
- 更改记录分隔符为 \r\n 并设置读取二进制模式,但不影响标准输入模式:
gawk -v RS="\r\n" -e "BEGIN { BINMODE = 1 }" …
或者
gawk -f binmode1.awk …

2.4 在Cygwin环境中使用gawk

如果你使用Cygwin环境,在MS-Windows下可以直接构建和使用gawk。该环境使用Bash、GCC、GNU Make和其他GNU程序,很好地模拟了GNU/Linux。Cygwin的编译和安装过程与Unix系统相同:

tar -xvpzf gawk-4.1.2.tar.gz
cd gawk-4.1.2
./configure
make && make check

与同一系统上的GNU/Linux相比,Cygwin上的 configure 步骤需要更长的时间,但最终会完成,之后 make 过程照常进行。

2.5 在MSYS环境中使用gawk

在MS-Windows的MSYS环境中,gawk自动使用二进制模式读写文件,因此不需要使用 BINMODE 变量。但这可能会给其他移植到MS-Windows的类Unix组件带来问题,因为它们期望gawk能自动转换 \r\n ,而实际上gawk不会。

3. 在Vax/VMS和OpenVMS上编译和安装gawk

这部分将详细介绍在VMS系统下编译和安装gawk的方法。这里的“VMS”泛指OpenVMS。

3.1 编译gawk

在VMS下编译gawk,有两种方式可供选择:一是使用DCL命令程序,它会发出所有必要的CC和LINK命令;二是使用适用于MMS和MMK实用程序的Makefile。从源代码目录开始,可以使用以下任意一种方法:
1. 使用DCL命令程序:

$ @[.vms]vmsbuild.com
  1. 使用MMS:
$ MMS/DESCRIPTION=[.vms]descrip.mms gawk
  1. 使用MMK:
$ MMK/DESCRIPTION=[.vms]descrip.mms gawk

MMK是MMS的开源免费近似克隆版本,能更好地处理支持大小写文件名的ODS - 5卷。MMK可从 https://github.com/endlesssoftware/mmk 获取。在使用ODS - 5卷并启用扩展解析时,目标参数的大小写可能需要严格匹配。

gawk已在多个VMS版本和架构上进行了测试,如VAX/VMS 7.3、Alpha/VMS 7.3 - 1、Alpha/VMS 7.3、Alpha/VMS 7.3 - 2和IA64/VMS 8.3等。最近的构建在Alpha VMS 8.3上使用HP C V7.3,在Alpha和IA64 VMS 8.4上使用HP C 7.3.1。

graph TD
    A[开始编译] --> B{选择编译方式}
    B -- DCL命令程序 --> C[@[.vms]vmsbuild.com]
    B -- MMS --> D[MMS/DESCRIPTION=[.vms]descrip.mms gawk]
    B -- MMK --> E[MMK/DESCRIPTION=[.vms]descrip.mms gawk]
    C --> F[完成编译]
    D --> F
    E --> F
3.2 编译gawk动态扩展

移植到VMS的扩展可以使用以下命令之一进行编译:

$ MMS/DESCRIPTION=[.vms]descrip.mms extensions

或者

$ MMK/DESCRIPTION=[.vms]descrip.mms extensions

gawk使用 AWKLIBPATH 作为环境变量或逻辑名称来查找动态扩展。动态扩展需要使用与编译gawk本身相同的编译器选项进行编译,包括浮点运算、指针大小和符号名称处理。具体要求如下:
| 架构 | 编译器选项 |
| ---- | ---- |
| Alpha和Itanium | /name=(as_is,short)<br>/float=ieee/ieee_mode=denorm_results |
| VAX | /name=(as_is,short) |

编译时宏需要在包含第一个VMS提供的头文件之前定义,示例代码如下:

#if (__CRTL_VER >= 70200000) && !defined (__VAX)
#define _LARGEFILE 1
#endif
#ifndef __VAX
#ifdef __CRTL_VER
#if __CRTL_VER >= 80200000
#define _USE_STD_STAT 1
#endif
#endif
#endif

如果编写自己的VMS扩展,必须自行提供这些定义。在VMS上构建gawk时创建的 config.h 文件会为你完成这些定义;如果使用该文件或类似文件,必须记得在包含任何VMS提供的头文件之前包含它。

3.3 安装gawk

要使用gawk,只需要一个“外部”命令,即一个值以美元符号开头的DCL符号。例如:

$ GAWK :== $disk1:[gnubin]gawk

$disk1:[gnubin] 替换为gawk.exe的实际位置。这个符号应该放在任何想要运行gawk的用户的 login.com 文件中,以便用户每次登录时都能定义该符号。或者,也可以将该符号放在系统范围的 sylogin.com 程序中,这样所有用户都可以运行gawk。

如果gawk是通过PCSI套件安装到 GNV$GNU: 目录树中的,程序名将是 GNV$GNU:[bin]gnv$gawk.exe ,帮助文件将是 GNV$GNU:[vms_help]gawk.hlp 。PCSI套件还会安装一个 GNV$GNU:[vms_bin]gawk_verb.cld 文件,可用于将gawk和awk添加为DCL命令。

对于当前进程,可以使用以下命令:

$ set command gnv$gnu:[vms_bin]gawk_verb.cld

系统管理员可以使用 GNV$GNU:[vms_bin]gawk_verb.cld 将gawk和awk添加到系统范围的 DCLTABLES 中。DCL语法在 gawk.hlp 文件中有文档说明。

可选地,可以将 gawk.hlp 条目加载到VMS帮助库中:

$ LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp

可以用特定于站点的帮助库替换标准的VMS库 HELPLIB 。加载帮助文本后,使用以下命令:

$ HELP GAWK

可以获取关于gawk实现和awk编程语言的信息。逻辑名称 AWK_LIBRARY 可以指定awk程序文件的默认位置。对于 -f 选项,如果指定的文件名中没有设备或目录路径信息,gawk首先会在当前目录中查找,然后在 AWK_LIBRARY 翻译指定的目录中查找。如果在两个目录中都未找到文件,gawk会在文件名后添加 .awk 后缀并重新尝试查找。如果 AWK_LIBRARY 未定义,则默认值为 SYS$LIBRARY:

3.4 运行gawk

VMS上的命令行解析和引号约定与其他系统有显著不同,因此本书或其他来源中的示例通常需要进行一些小的更改,但更改幅度较小,所有awk程序都应该能正常运行。以下是两个简单的测试示例:

$ gawk -- "BEGIN {print \"Hello, World!\"}"
$ gawk -"W" version

注意,大写和混合大小写的文本必须加引号。VMS版的gawk除了原始的shell风格接口外,还包括一个DCL风格的接口。双命令行解析的一个副作用是,如果只有一个参数(如带引号的字符串程序),命令会变得模糊不清。为了解决这个问题,通常可选的 -- 标志是必需的,以强制使用Unix风格的解析而不是DCL解析。如果存在其他破折号类型的选项(或多个要处理的参数,如数据文件),则不存在歧义,可以省略 --

程序退出时,退出值是Unix风格的值,并会编码为VMS退出状态值。VMS严重性位将根据退出值设置。失败用1表示,VMS会设置 ERROR 状态;致命错误用2表示,VMS会设置 FATAL 状态;其他所有值都表示 SUCCESS 状态。退出值会进行编码以符合VMS编码标准,其 C_FACILITY_NO 0x350000 ,并在将数字左移3位后加上常量 0xA000 以留出严重程度代码的空间。要从VMS状态中提取实际的gawk退出代码,可以使用以下公式:

unix_status = (vms_status .and. &x7f8) / 8

使用 exec() 调用gawk的C程序将获得原始的Unix风格退出值。旧版本的VMS版gawk将Unix退出代码0视为1,失败视为2,致命错误视为4,并传递其他所有数字,这违反了VMS退出状态编码要求。VAX/VMS浮点使用无偏舍入。VMS默认以GMT报告时间值,除非设置了 SYS$TIMEZONE_RULE TZ 逻辑名称。较旧版本的VMS(如VAX/VMS 7.3)不会设置这些逻辑名称。使用 -f 选项查找awk程序文件时,默认搜索路径是 "SYS$DISK:[],AWK_LIBRARY:" 。逻辑名称 AWKPATH 可用于覆盖此默认值,其格式是用逗号分隔的目录规范列表。定义时,值应该加引号,以确保它保留单一翻译而不是多翻译的RMS搜索列表。

4. 报告问题和错误

如果你在使用gawk时遇到问题或认为发现了错误,应该向开发者报告。在报告错误之前,要确保你真的发现了一个真正的错误。仔细重读文档,查看是否允许你执行你正在尝试的操作。如果不清楚是否可以执行某项操作,也应该报告,这可能是文档中的错误。

在报告错误或尝试自行修复之前,尝试将问题隔离到最小的awk程序和输入数据文件,以便重现问题。然后向开发者发送程序和数据文件、你使用的Unix系统类型、编译gawk所用的编译器以及gawk给出的准确结果。同时说明你期望发生的情况,这有助于开发者判断问题是否真的出在文档中。

确保包含你使用的gawk版本号,可以使用以下命令获取该信息:

gawk --version

一旦有了精确的问题描述,将电子邮件发送到 bug - gawk@gnu.org 。gawk维护者订阅了这个地址,因此他们会收到你的错误报告。虽然你可以直接向维护者发送邮件,但建议使用错误报告地址,因为该邮件列表会在GNU项目中存档。所有邮件必须使用英语,因为这是所有维护者共同理解的唯一语言。不要尝试通过在Usenet/Internet新闻组 comp.lang.awk 上发布来报告gawk中的错误。gawk开发者偶尔会阅读这个新闻组,但不能保证会看到你的帖子。这里描述的步骤是报告错误的唯一官方认可方式。

综上所述,gawk在不同操作系统上的安装、配置、使用和问题处理都有其特定的方法和注意事项。通过遵循上述步骤和建议,你可以顺利地在各种系统中使用gawk进行数据处理和编程。

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建求解过程,重点关注不确定性处理方法需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值