我正在经历this GNU awk example。该计划需要ord()
and chr()
library functions。
这就是我有点困惑的地方。我不明白这段代码片段做了什么:
BEGIN { _ord_init() }
function _ord_init( low, high, i, t)
{
low = sprintf("%c", 7) # BEL is ascii 7
if (low == "\a") { # regular ascii
low = 0
high = 127
} else if (sprintf("%c", 128 + 7) == "\a") {
# ascii, mark parity
low = 128
high = 255
} else { # ebcdic(!)
low = 0
high = 255
}
for (i = low; i <= high; i++) {
t = sprintf("%c", i)
_ord_[t] = i
}
}
如果删除它(BEGIN { _ord_init() }
)并运行split.awk示例,它的工作方式却很奇怪:有一个名为“xa?”的文件。出现,文件“xab”丢失。
这是我的输入:
1 2 3 hello
1 3 4 world
2 4 5 india
4 2 1 china
我按原样运行拆分程序:
awk -f split.awk -2 input.txt
split.awk的内容是这样的:它将两个临时URL中的代码放入一个文件“split.awk”。
那么,函数_ord_init
究竟做了什么?
答案 0 :(得分:0)
定义在运行时使用的字符集。
它使用对特定请求(sprintf("%c", 7)
和sprintf("%c", 128 + 7) == "\a"
)的本地响应,以允许chr()
和ord()
以相同的字符集回答。
治疗3个主要家庭(其他未经治疗) - ascii(最常用于awk的开发时) - 奇偶校验ascii(ASCII但第8位始终设置为1而不是0或传输中的奇偶校验断路器[以确保总是奇数为1]) - ebcdic(通常是大型机)