INPUT
63 0063
63 0384
0 0065
65 0065
6A 0065
输出
0063 0063
0063 0384
0000 0065
0065 0065
006A 0065
使用awk'{printf“%04s%04s \ n”,$ 1,$ 2}'输出空格而不是零
63 0063
63 0384
0 0065
65 0065
6A 0065
答案 0 :(得分:2)
您可以将十六进制转换为数字,然后再次将其打印为十六进制:
awk '{printf "%04x", strtonum("0x"$1)}'
答案 1 :(得分:0)
你在awk的printf中有一个额外的%s
。您可以使用此命令:
awk '{printf "%06s %06s\n", $1, $2}' file.txt
获取宽度为6,其中空格将用零填充。
要在纯粹的bash中做同样的事情,请使用以下代码:
while read a1 a2
do
printf "%06s %06s\n" $a1 $a2
done < file.txt
答案 2 :(得分:0)
使用子字符串技术将在各种语言中提供一致的结果,尽管语法会有所不同。在AWK:
awk 'function pad(string) {return substr("0000" string, length(string) + 1)} {print pad($1), pad($2)}'
您可以将长度作为参数传递的一种方式:
awk 'function pad(string, len, z) {z = "000000000000"; return substr(substr(z, length(z) - len) string, length(string) + 1)} {print pad($1, 4), pad($2, 4)}'
答案 3 :(得分:0)
有同样的问题。为什么不使用sed将空格转换为0?
我认为这可行:
echo 63 | awk '{ printf "%4s\n", $0 }' | sed 's/ /0/g' 0063
echo DF | awk '{ printf "%4s\n", $0 }' | sed 's/ /0/g' 00DF