我有一个包含十六进制数字列表的文件,0x12345678
每行一个.
我想对它们进行计算.为此,我想到了使用awk
.但是如果awk
使用该printf
函数很容易打印十六进制数字,我还没有找到一种方法来解释十六进制输入而不是文本(或0
转换为整数停止x
).
awk '{ print $1; }' // 0x12345678
awk '{ printf("%x\n", $1)}' // 0
awk '{ printf("%x\n", $1+1)}' // 1 // DarkDust answer
awk '{ printf("%s: %x\n", $1, $1)}' // 0x12345678: 0
Run Code Online (Sandbox Code Playgroud)
是否可以打印,例如+1值?
awk '{ printf(%x\n", ??????)}' // 0x12345679
Run Code Online (Sandbox Code Playgroud)
编辑:欢迎使用其他语言的一个衬垫!(如果合理的长度;-))
sch*_*hot 18
在原始nawk
和mawk
实现中,十六进制(和八进制)数字被识别.gawk
(我猜您正在使用)具有不执行此操作的功能/错误.它有一个命令行开关来获取你想要的行为:--non-decimal-data
.
echo 0x12345678 | mawk '{ printf "%s: %x\n", $1, $1 }'
0x12345678: 12345678
echo 0x12345678 | gawk '{ printf "%s: %x\n", $1, $1 }'
0x12345678: 0
echo 0x12345678 | gawk --non-decimal-data '{ printf "%s: %x\n", $1, $1 }'
0x12345678: 12345678
Run Code Online (Sandbox Code Playgroud)
gawk具有以下strtonum
功能:
% echo 0x12345678 | gawk '{ printf "%s: %x - %x\n", $1, $1, strtonum($1) }'
0x12345678: 0 - 12345678
Run Code Online (Sandbox Code Playgroud)
也许你根本不需要awk ,因为字符串/数字转换很复杂。Bash版本 3 和 4 非常强大。留在Bash中通常更简单、更清晰、更便携,也许还可以使用grep和cut等。
例如,在Bash中,十六进制数字会自然转换:
$ printf "%d" 0xDeadBeef
3735928559
$ x='0xE'; printf "%d %d %d" $x "$x" $((x + 1))
14 14 15
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
归档时间: |
|
查看次数: |
19695 次 |
最近记录: |