【问题标题】:awk, not clear about snippet in example from gnu-awk siteawk,不清楚来自 gnu-awk 站点的示例中的片段
【发布时间】: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&lt;1&gt;
  • 文件名中的? 是常规的? 还是未知字符符号(通常是黑色菱形的问号)?在我看来,文件名最终应该包含一个空字节。
  • 我想知道那个使用ASCII的小型机制造商的名称是什么,带有标记奇偶校验,为什么他们这样做......

标签: linux bash awk


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多