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?

Raymond Ghaffarian Shirazi
fuente
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
Glenn Jackman
fuente
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
Nikhil
fuente