coreutilsを使用してsort
16進値(フィールド)に基づいて数値をソートする方法は?こんなことを期待していた
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
があります)、bc
10進数に変換します(大文字と0x
小文字を一致させるにはプレフィックスなしで大文字の16進数が必要です)。次に、列を連結し、ソートして分割します。
最小サンプル入力:
5 hhf 25
3 ezh ae
1 hdh d12
2 ukr 9f
4 jjk 7
期待される出力(hex
3番目の列でソートされたファイル):
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進形式のソートフィールドを使用してこのデータの新しいバージョンを生成することです。つまり、awk
1変換して各行の前に追加し、結果を並べ替え、最後のステップで追加されたフィールドを削除します。
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()
。