簡體   English   中英

awk,不清楚來自gnu-awk網站的示例片段

[英]awk, not clear about snippet in example from gnu-awk site

我正在看這個GNU awk示例 該程序需要ord()chr()庫函數

那就是我有點困惑的地方。 我不明白此代碼段的作用:

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到底能做什么?

它定義了在運行時使用的字符集。

它使用對特定請求( sprintf("%c", 7)sprintf("%c", 128 + 7) == "\\a" )的本地響應來允許chr()ord()回答相同的字符集。

處理了3個主要的家庭集(此處未處理其他主要集)-ASCII(在awk的開發時間最多使用)-奇偶校驗ASCII(ASCII,但第8位始終設置為1而不是0或傳輸中的奇偶校驗符[以確保存在總是1的奇數])-ebcdic(通常是大型機)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM