【发布时间】:2015-01-18 15:26:58
【问题描述】:
我正在处理this GNU awk example。该程序需要ord() and chr() library functions。
这就是我有点困惑的地方。我不明白这段代码 sn-p 做了什么:
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 函数究竟做了什么?
【问题讨论】:
-
该功能正在执行对 1987 年的世界具有重要意义的工作。
-
它正在初始化
_ord_映射。没有它,映射没有值,你会得到xa<1>。 -
文件名中的
?是常规的?还是未知字符符号(通常是黑色菱形的问号)?在我看来,文件名最终应该包含一个空字节。 -
我想知道那个使用ASCII的小型机制造商的名称是什么,带有标记奇偶校验,为什么他们这样做......