我在使用 awk 和比较值时遇到问题。这是一个最小的例子:
echo "0000e149 0000e152" | awk '{print($1==$2)}'
Run Code Online (Sandbox Code Playgroud)
哪个输出1而不是0. 我究竟做错了什么 ?我该怎么做才能比较这些值?
谢谢,
要将表示十六进制数的字符串转换为数值,您需要做两件事:在字符串前加上前缀"0x"并使用strtonum()函数。
展示:
echo "0000e149 0000e152" | gawk '{
print $1, $1+0
print $2, $2+0
n1 = strtonum("0x" $1)
n2 = strtonum("0x" $2)
print $1, n1
print $2, n2
}'
Run Code Online (Sandbox Code Playgroud)
0000e149 0
0000e152 0
0000e149 57673
0000e152 57682
Run Code Online (Sandbox Code Playgroud)
我们可以看到,天真地将字符串视为数字,awk 认为它们的值是 0。这是因为第一个非数字之前的数字恰好只是零。
参考:https
://www.gnu.org/software/gawk/manual/html_node/String-Functions.html请注意,strtonum 是 GNU awk 扩展