Ordenar una tabla basada en una columna con una cadena mezclada con números en bash


0

Tengo un archivo txt con la tabla de abajo

3-6-13  0.0712  ./13-t.xyz
3-6-13  0.0717  ./2-t.xyz
3-6-13  0.3737  ./6-t.xyz
3-6-13  0.5862  ./5-t.xyz
3-6-13  0.7503  ./4-t.xyz

¿Cómo puedo ordenarlo en función de la tercera columna como:

3-6-13  0.0717  ./2-t.xyz
3-6-13  0.7503  ./4-t.xyz
3-6-13  0.5862  ./5-t.xyz
3-6-13  0.3737  ./6-t.xyz
3-6-13  0.0712  ./13-t.xyz

desafortunadamente no puedo usar la opción -v de ordenar;

sort -v -k 3 out.tmp

alguna otra solucion por awk sed o etc?


1
¿Por qué no puedes usar -V(es V mayúscula en mi versión de tipo)?
choroba

Curioso: qué / qué sistema operativo está utilizando, Ubuntu / Debian no tiene "-v" en orden.
Hannu

Respuestas:


1

Puede usar una transformación de Schwartz: extraiga el número en un campo separado, ordénelo y luego quítelo

$ sed -r 's/(.*\/)([0-9]+)/\2 \1\2/' table.txt | sort -n -k1,1 | cut -d" " -f2-
3-6-13  0.0717  ./2-t.xyz
3-6-13  0.7503  ./4-t.xyz
3-6-13  0.5862  ./5-t.xyz
3-6-13  0.3737  ./6-t.xyz
3-6-13  0.0712  ./13-t.xyz

0
sort --numeric-sort --ignore-leading-blanks -k3.3 "${File}"

Consulte: Clave de man sort

Salida

3-6-13  0.0717  ./2-t.xyz
3-6-13  0.7503  ./4-t.xyz
3-6-13  0.5862  ./5-t.xyz
3-6-13  0.3737  ./6-t.xyz
3-6-13  0.0712  ./13-t.xyz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.