我有一个包含大量十进制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
我想将每一行转换为十六进制格式(所需的输出):
00,00,00
00,03,15
00,07,30
00,08,45
我知道我可以使用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,69,255); print $hex'
在069
答案 0 :(得分:6)
它在awk中工作正常:
$ echo 000,062,102 | awk '{printf( "%x,%x,%x\n", $1,$2,$3)}' FS=,
0,3e,66
答案 1 :(得分:4)
你只是错过了参数之间的逗号:
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)上都验证了。
答案 2 :(得分:1)
Perl解决方案:
perl -pe 's/([0-9]+)/sprintf "%02x", $1/ge' INPUT
您不必关心八进制解释。它仅适用于文字,而不适用于变量值。