2

入力

    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 
4

4 に答える 4

3

16 進数を数値に変換してから、再度 16 進数として出力できます。

awk '{printf "%04x", strtonum("0x"$1)}'
于 2012-08-01T09:22:47.773 に答える
0

部分文字列手法を使用すると、さまざまな言語で一貫した結果が得られますが、構文は異なります。AWK で:

awk 'function pad(string) {return substr("0000" string, length(string) + 1)} {print pad($1), pad($2)}'

長さを引数として渡す 1 つの方法:

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)}'
于 2012-08-01T11:14:13.867 に答える
0

%sawkのprintfに余分なものがあります。次のコマンドを使用できます。

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
于 2012-08-01T09:17:44.263 に答える