16進値でソート

16進値でソート

coreutilsを使用してsort16進値(フィールド)に基づいて数値をソートする方法は?こんなことを期待していた

sort -k3,3x file_to_sort

しかし、そのような状況はx存在しません。

編集:これまで私が思いついた最高のソリューションは次のとおりです。

{ echo ibase=16; cut -d' ' -f3 file_to_sort; } |
  bc | paste -d: - file_to_sort | sort -t: -k1,1n | cut -d: -f2-

cut -d' ' -f3検索フィールドを分離し(もちろん異なる場合-k3,3があります)、bc10進数に変換します(大文字と0x小文字を一致させるにはプレフィックスなしで大文字の16進数が必要です)。次に、列を連結し、ソートして分割します。

最小サンプル入力:

5 hhf 25
3 ezh ae
1 hdh d12
2 ukr 9f
4 jjk 7

期待される出力(hex3番目の列でソートされたファイル):

4 jjk 7
5 hhf 25
2 ukr 9f
3 ezh ae
1 hdh d12

ベストアンサー1

私は次のサンプルデータを使用します。

1 hdh d12
2 ukr 9f
3 ezh ae
4 jjk 7
5 hhf 25

アイデアは、10進形式のソートフィールドを使用してこのデータの新しいバージョンを生成することです。つまり、awk1変換して各行の前に追加し、結果を並べ替え、最後のステップで追加されたフィールドを削除します。

awk '{val="0x" $3; sub("^0x0x","0x",val); print strtonum(val),$0 ;}' file | 
  sort -n | 
  sed 's/^[^ ]* //'

結果は次のとおりです。

4 jjk 7
5 hhf 25
2 ukr 9f
3 ezh ae
1 hdh d12

1これはGNUawk機能を想定していますstrtonum()

おすすめ記事