Linux/awk将包含十进制数的文件转换为十六进制数
我有一个文本文件,包含许多十进制的RGB颜色代码。比如说Linux/awk将包含十进制数的文件转换为十六进制数,linux,perl,awk,Linux,Perl,Awk,我有一个文本文件,包含许多十进制的RGB颜色代码。比如说 000,000,000 000,003,025 000,007,048 000,010,069 000,014,089 000,017,108 000,020,125 000,024,140 000,027,155 我想将每行转换为十六进制格式(所需输出): 我知道我可以使用printf“%.2x、%.2x、%.2x\n”000 010 69但是printf“%.2x、%.2x、%.2x\n”000 010 069不起作用,因为069是
000,000,000
000,003,025
000,007,048
000,010,069
000,014,089
000,017,108
000,020,125
000,024,140
000,027,155
我想将每行转换为十六进制格式(所需输出):
我知道我可以使用printf“%.2x、%.2x、%.2x\n”000 010 69
但是printf“%.2x、%.2x、%.2x\n”000 010 069
不起作用,因为069是不可转换的
我认为awk是一个合理的工具,但是我想我在转换小数时也会遇到同样的问题,比如069等
perl-le'$hex=sprintf(“%.2x,%.2x,%.2x”,005,69255);print$hex'
也存在与069相同的问题,您只是缺少参数之间的逗号:
echo "000,010,069" | awk -F ',' '{ printf "%02X,%02X,%02X\n", $1, $2, $3 }'
产生:
00,0A,45
在Mac OS X(BSD awk)和Linux(GNU awk)上都进行了验证。它在awk中工作正常:
$ echo 000,062,102 | awk '{printf( "%x,%x,%x\n", $1,$2,$3)}' FS=,
0,3e,66
Perl解决方案:
perl -pe 's/([0-9]+)/sprintf "%02x", $1/ge' INPUT
你不必关心八进制的解释。它只适用于文本,不适用于变量的值。请注意,“printf”%x\n“010”甚至比“printf”%x\n“069”更危险,因为它以静默方式给出您不期望的结果,而不是带着错误退出。您可以使用“%02x”填充十六进制数。不确定将C样式中的八进制数解释为十进制数的最佳方法。可能会有所帮助:bc
perl -pe 's/([0-9]+)/sprintf "%02x", $1/ge' INPUT