3

我有一个包含大量十进制 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 69printf "%.2x,%.2x,%.2x\n" 000 010 069由于 069 不可转换,因此无法使用。

我认为awk这对于这项工作来说是一个合理的工具,但我想我在转换 069 等小数时也会遇到同样的问题。

perl -le '$hex = sprintf("%.2x,%.2x,%.2x",005,69,255); print $hex'069也有同样的问题

4

3 回答 3

8

它在 awk 中运行良好:

$ echo 000,062,102 | awk '{printf( "%x,%x,%x\n", $1,$2,$3)}' FS=,
0,3e,66
于 2013-06-12T11:02:35.843 回答
5

您只是缺少参数之间的逗号:

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) 上均经过验证。

于 2013-06-12T11:01:38.963 回答
1

Perl 解决方案:

perl -pe 's/([0-9]+)/sprintf "%02x", $1/ge' INPUT

您不必关心八进制解释。它仅适用于文字,不适用于变量的值。

于 2013-06-12T11:02:57.473 回答