如何在 AWK 脚本中将 ASCII 字符转换为 ASCII HEX?
我想要按字母范围循环
例子
for(i="a"; i<"g"; i++)
print i;
注意:我想要按十六进制表示的范围循环并打印字符。
答案1
我觉得你真的不需要全部那些角色...
$ awk 'BEGIN { chartable="abcdefghij" ; for (i=index(chartable, "a"); i<index(chartable, "g"); i++) { print substr(chartable, i, 1) } }'
a
b
c
d
e
f
答案2
建立一个包含所有 ASCII 字符的表,并使用 awk 内置命令index()
查找表中的字符。然后使用sprintf()
将返回的十进制值转换index()
为十六进制。
BEGIN {
for (i = 0; i < 128; i++) {
table = sprintf("%s%c", table, i);
}
}
function chartohex (char) {
return sprintf("0x%x", index(table, char));
}
END { # examples
print chartohex("a");
print chartohex("A");
print chartohex("!");
}
将此代码放入文件“foo”并运行awk -f foo < /dev/null
,您将看到以十六进制打印的“a”、“A”和“!”的 ASCII 值。
答案3
awk 没有像 python 那样的 ord()、chr() 函数。您必须首先在 BEGIN 块中创建数组,其索引是 ascii 字符,值是十进制数。
awk 'BEGIN {
for (i = 0; i <= 255; i++) {
t = sprintf("%c", i)
a[t] = i
}
for( i=a["a"]; i < a["g"]; i++)
print sprintf("%c",i)
}'
a
b
c
d
e
f