sort – ordenar por valor hexadecimal

Pregunta:

Usando coreutils sort , ¿cómo puedo ordenar numéricamente por un valor hexadecimal (campo)? Esperaba algo parecido a

sort -k3,3x file_to_sort

sin embargo, tal x no existe.

Editar: La mejor solución que se me ocurrió hasta ahora es:

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

donde el cut -d' ' -f3 aísla el campo de búsqueda (esto es -k3,3 – esto puede variar, por supuesto), y bc hace la conversión a decimal (requiere hexadecimal en mayúsculas, sin prefijo 0x , coincidiendo con mi caso) . Luego me uno, clasifico y divido columnas.

Entrada mínima de muestra:

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

Salida esperada (archivo ordenado por tercera columna hex ):

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

Respuesta:

Yo uso estos datos de ejemplo:

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

La idea es crear una nueva versión de estos datos con el campo de clasificación en forma decimal. Es decir, awk convierte, lo antepone a cada línea, se ordena el resultado y, como último paso, se elimina el campo agregado:

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

Lo que da como resultado esta salida:

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

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım