我有一个文本文件,如下所示:
RAM_SIZE 3128
RAM_ADDRESS_WIDTH 0xF
MTFE 0xF
IPS_ADDR_WIDTH 314
我想将十六进制值转换为十进制并显示如下内容:
RAM_SIZE 3128
RAM_ADDRESS_WIDTH 15
MTFE 15
IPS_ADDR_WIDTH 314
我试过用awk:
#!/bin/awk -f
{
if ($2 == "0x*")
printf "%s %d \n", $1, $3 ;
else
print $1 " " $2
}
如果是这种情况,则无法正确使用通配符。
我也想使用sed,但我不知道如何在sed表达式中使用列号:
sed -e 's/0x*/$(($2))/'
答案 0 :(得分:2)
-n
告诉GNU awk处理非十进制数据:
$ gawk -n '{$2+=0}1' file
RAM_SIZE 3128
RAM_ADDRESS_WIDTH 15
MTFE 15
IPS_ADDR_WIDTH 314
你的陈述Not able to use wildcards properly in if case.
,你写道:
if ($2 == "0x*")
,其中
"0x*" is a STRING containing the characters "0", "x", and "*".
== is the STRING comparison operator.
你想要的是一个正则表达式比较,而不是一个字符串,所以你应该从写作开始:
if ($2 ~ /0x*/)
自:
/0x*/ is a REGEXP that means `0 then x repeated zero or more times`
~ is the REGEXP comparison operator
但我怀疑你并不真正想要*
以及你真正想要的是:
if ($2 ~ /^0x/)
自:
/^0x/ is a REGEXP that means `starting with 0 and followed by x`
答案 1 :(得分:1)
使用gnu-awk非常简单:
awk '{print $1, strtonum($2)}' file
RAM_SIZE 3128
RAM_ADDRESS_WIDTH 15
MTFE 15
IPS_ADDR_WIDTH 314