Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux/awk将包含十进制数的文件转换为十六进制数_Linux_Perl_Awk - Fatal编程技术网

Linux/awk将包含十进制数的文件转换为十六进制数

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是

我有一个文本文件,包含许多十进制的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是不可转换的

我认为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