awk,不清楚gnu-awk网站中的代码片段

时间:2015-01-18 15:26:58

标签: linux bash awk

我正在经历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究竟做了什么?

1 个答案:

答案 0 :(得分:0)

定义在运行时使用的字符集。

它使用对特定请求(sprintf("%c", 7)sprintf("%c", 128 + 7) == "\a")的本地响应,以允许chr()ord()以相同的字符集回答。

治疗3个主要家庭(其他未经治疗)   - ascii(最常用于awk的开发时)   - 奇偶校验ascii(ASCII但第8位始终设置为1而不是0或传输中的奇偶校验断路器[以确保总是奇数为1])   - ebcdic(通常是大型机)