我可以在过程块中打印十六进制字符
$ awk '{printf "%c", $0}' <<< 0x21
!
但是,相同的字符不会在BEGIN块中打印
$ awk 'BEGIN {printf "%c", 0x21}'
0
如何在BEGIN块中打印十六进制字符?
答案 0 :(得分:3)
GNU awk
支持十六进制表示法,但traditional awk
does not。 awk
的POSIX标准为here,并声明:
整数常量不能以0x开头或包含十六进制 数字'a','b','c','d','e','f','A','B','C','D','E'或'F'。
这是一种使用bash
为POSIX awk提供常量字符串的方法:
awk -v p=$'\x21' 'BEGIN {printf "%c", p}'
答案 1 :(得分:0)
当读取字符串时,awk将识别十六进制数字。
当读取数字时,awk无法识别十六进制数字,它将会丢失 一切都以第一个非数字开头。
所以第一个例子$0
是一个字符串,一切都很好。随着第二个
示例x21
被抛弃,剩下0
。解决方法是将0x21
作为传递
串
$ awk 'BEGIN {printf "%c", +"0x21"}'
!