入力
$ cat /tmp/input
0x45 aaa 333
0x50 dd 33
0x4 bbbb 444
0x456 cc 22
0x5 eee 1111
1つのライナーの並べ替え
$ gawk --non-decimal-data '{ dec = sprintf("%d", $1); print dec " " $0 }' /tmp/input | sort -n -k 1 | cut -f2- -d' '
0x4 bbbb 444
0x5 eee 1111
0x45 aaa 333
0x50 dd 33
0x456 cc 22
ステップごとに並べ替える
ステップ1:16進数の10進表現で新しい最初の列を追加します。
$ gawk --non-decimal-data '{ dec = sprintf("%d", $1); print dec " " $0 }' /tmp/input
69 0x45 aaa 333
80 0x50 dd 33
4 0x4 bbbb 444
1110 0x456 cc 22
5 0x5 eee 1111
ステップ2:最初のフィールドで数値的に行を並べ替えます。
$ gawk --non-decimal-data '{ dec = sprintf("%d", $1); print dec " " $0 }' /tmp/input | sort -n -k 1
4 0x4 bbbb 444
5 0x5 eee 1111
69 0x45 aaa 333
80 0x50 dd 33
1110 0x456 cc 22
ステップ3:最初の列を削除します。
$ gawk --non-decimal-data '{ dec = sprintf("%d", $1); print dec " " $0 }' /tmp/input | sort -n -k 1 | cut -f2- -d' '
0x4 bbbb 444
0x5 eee 1111
0x45 aaa 333
0x50 dd 33
0x456 cc 22
-k3,3
?0xですべて同じ長さの16進数が見られますか?大文字/小文字の混在はありませんか?「はい」の場合、文字列として解釈されたときに適切にソートする必要があります。たぶんあなたは私たちにいくつかのサンプルデータを見せることができますか?