在十六进制表示法的左侧添加零作为填充字符

时间:2018-07-20 13:54:50

标签: shell unix awk sed

我使用此命令将十进制数字转换为十六进制

( echo "obase=16" ; cat file.txt ) | bc

但是,在输出中,某些值的位数少于8

FFF95E13
7613
EE13
16613
6686E13

如果数字位数少于8,我想在十六进制表示法的左边添加零作为填充字符。因此,其最终格式如下:

FFF95E13
00007613
0000EE13
00016613
06686E13

我可以使用python来做,但是我希望是否可以使用awksed吗?如果有一种方法可以转换为十六进制并添加前导零以确保所有值都是8位,那会更好。

2 个答案:

答案 0 :(得分:4)

也许您可以只使用awk来代替:

awk '{ printf "%08X\n", $1 }' file

这将以大写的十六进制打印每一行的第一列,零填充最多8个字符。

$ cat file
111
222
333
444
$ awk '{ printf "%08X\n", $1 }' file
0000006F
000000DE
0000014D
000001BC

答案 1 :(得分:1)

您可以直接通过redux-orm来实现

printf

$ seq 100 25 200 | xargs printf "%08X\n" 00000064 0000007D 00000096 000000AF 000000C8 不能从文件中读取,您可以通过管道输入文件中的数据:

printf

或重定向:

$ cat file | xargs printf "%08X\n"

或放在末尾:

$ <file xargs printf "%08X\n"

尽管并没有为$ xargs printf "%08X\n" <file 解决方案增加太多...