只是为了确定,使用 awk (至少是 Gnu awk)我真的可以转换:
从八进制到 ASCII:
print "\101" # or a="\101"
A
Run Code Online (Sandbox Code Playgroud)
从十六进制到 ASCII:
print "\x41" # or b="\x41"
B
Run Code Online (Sandbox Code Playgroud)
但从十进制到 ASCII 我必须:
$ printf "%c\n", 67 # or c=sprintf("%c", 67)
C
Run Code Online (Sandbox Code Playgroud)
print "\?67"我错过的 RTFM(备忘录)中没有秘密吗?
我正在尝试从以下位置获取字符频率$0="aabccc":
for(i=141; i<143; i++) a=a gsub("\\"i, ""); print a
213
Run Code Online (Sandbox Code Playgroud)
但使用十进制(而不是上面示例中的八进制)。十进制方法看起来非常长:
$ cat foo
aabccc
$ awk '{for(i=97;i<=99;i++){c=sprintf("%c",i);a=a gsub(c,"")} print a}' foo
213
Run Code Online (Sandbox Code Playgroud)
就用在这里了。
不,\nnn是八进制,\xnn是十六进制 - 这就是包含不能按原样包含在字符串中的字符的全部内容,并且您应该始终使用八进制而不是十六进制表示形式以保持稳健性(例如,请参见http://awk.htm)。 freeshell.org/PrintASingleQuote)。
我不明白你问题的最后一部分,你说明你想用这个做什么 - 提供简洁、可测试的示例输入和预期输出,我相信有人可以帮助你以正确的方式做到这一点,无论如何是。
这就是你想做的吗?
$ awk 'BEGIN{for (i=0141; i<0143; i++) print i}'
97
98
Run Code Online (Sandbox Code Playgroud)