我有一个十六进制字符串,我将它中的每个字符转换为DEC,并用空格分隔并用括号输出它们。见例子:
input: "A1B2C3D4"
output: "[10 1 11 2 12 3 13 4 ]"
答案 0 :(得分:2)
这个awk one-liner完成了这项工作:
awk -v FS='' --non-decimal-data '{for(i=1;i<=NF;i++)printf "%d%s","0x"$i,(i==NF?RS:" ")}'
用你的例子测试:
kent$ echo "A1B2C3D4"|awk -v FS='' --non-decimal-data '{for(i=1;i<=NF;i++)printf "%d%s","0x"$i,(i==NF?RS:" ")}'
10 1 11 2 12 3 13 4
这里有两件事需要注意:
--non-decimal-data
gawk识别十六进制输入的选项0x
。内置printf
的替代方案:
awk -v FS='' '{for(i=1;i<=NF;i++){"printf \"%d\" \"0x"$i"\""|getline v;printf "%d%s",v,(i==NF?RS:" ")}}'
试验:
kent$ echo "A1B2C3D4"|awk -v FS='' '{for(i=1;i<=NF;i++){"printf \"%d\" \"0x"$i"\""|getline v;printf "%d%s",v,(i==NF?RS:" ")}}'
10 1 11 2 12 3 13 4