我在 file.txt
的每一行中都有一个十进制数:
1
2
3
我正在尝试(现在太久了)编写一个单行脚本来获得一个输出,其中每一行都有一个包含十进制、十六进制和二进制的列。为了简化任务,我们可以说原始数字以字节表示。所以最大值为 255。
我首先尝试将每个数字解码为带有前缀 0 的二进制,以便获得 8 位模式:
awk '{print "ibase=10;obase=2;"$1}' $1 |公元前 | xargs printf "%08d\n"
其中 awk 语句中的外部 $1 是
file.txt
。输出是:00000001 00000010 00000011
16 进制也一样,前面加一个 0
awk '{printf("0x%02x\n", $1)}' $1
和以前一样。输出是:
0x01 0x02 0x03
好吧,小数点应该只是一个打印:
1 2 3
我想要的是我拥有的一个类轮:
1 00000001 0x01
2 00000001 0x02
所以基本上是将 1. 2. 和 3. 放在输出的每一行中。
我尝试使用 system() 在 awk 中执行 bc(和其他命令)但没有成功。还有无数其他方式。你会怎么做?
最佳答案
下面的一行代码应该可以工作:
printf "%s %08d 0x%02x\n" "$1" $(bc <<< "ibase=10;obase=2;$1") "$1"
示例输出:
$ for i in {1..10}; do printf "%s %08d 0x%02x\n" "$i" $(bc <<< "ibase=10;obase=2;$i") "$i"; done
1 00000001 0x01
2 00000010 0x02
3 00000011 0x03
4 00000100 0x04
5 00000101 0x05
6 00000110 0x06
7 00000111 0x07
8 00001000 0x08
9 00001001 0x09
10 00001010 0x0a
关于bash - 在shell脚本中将十进制数转换为十六进制和二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18870209/