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

时间:2013-06-12 10:48:09

标签: 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

我想将每一行转换为十六进制格式(所需的输出):

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

方面也存在同样的问题

3 个答案:

答案 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

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