[英]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.