2012-01-26 18 views
20

Tengo un archivo como este (que se delimita el espacio):cómo usar el comando Linux Ordenar para ordenar el archivo de texto según la cuarta columna, orden numérico?

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067 
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067 

y quiero utilizar sort comando para ordenar el archivo de acuerdo con la cuarta columna. ¡Lo busqué por todas partes en Internet y encuentro diferentes soluciones que la monja funciona! ¡Incluso encuentro una pregunta similar en stackoverflow que la respuesta no funcionó para mí! ¡Así que estos son los comandos que estoy usando y no funcionan!

sort -n -k 4,1 out1.txt 
sort -n -k 4 out1.txt 
sort -n -k4 out1.txt 
sort -nk4 out1.txt 
sort +4 out1.txt 

después de ejecutar todos estos comandos que recibo esta salida (que es idéntico al de entrada):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067 
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067 

quiero obtener una salida como esta:

AX-19 Chr1_419087 1 41908741 T C 0 15 0.067 
AX-20 Chr1_419087 1 41908740 T C 0 13 0.067 
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
+1

si desea más ayuda, sugiero que se especifique lo que pase, y lo que se espera en lugar – sehe

+0

41908545 es inferior a 41908741. ¿Quieres ordenar los números por sus dígitos menos significativos ? – Joni

+1

¿Puede explicar qué regla causa su pedido preferido de '41908740',' 41908741', '41908545'? Parece que hay ** orden ** para ellos. – wallyk

Respuesta

34
sort -nk4 file 

-n for numerical sort 
-k for providing key 

o añadir -r option para la clasificación inversa

sort -nrk4 file 
1

Se debe ser

sort -k 4n out1.txt 

Jus t probado este tipo con GNU (--debug habilitado):

$ tac input | /bin/sort --debug -k 4n 
/bin/sort: using simple byte comparison 
/bin/sort: key 1 is numeric and spans multiple fields 
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51 
        ________ 
___________________________________________ 
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067 
        ________ 
___________________________________________ 
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067 
        ________ 
___________________________________________ 
+0

¡no, tampoco funciona! – mahmood

6

sort no ordena el archivo en el lugar. Emite una copia ordenada en su lugar.

Necesita sort -n -k 4 out.txt > sorted-out.txt.

Editar: Para obtener el orden que desee que tiene que ordenar el archivo con los números leído a la inversa. Esto lo hace:

cut -d' ' -f4 out.txt | rev | paste - out.txt | sort -k1 -n | cut -f2- > sorted-out.txt

+0

¡No funciona tampoco! – mahmood

+0

Pero sus datos no tienen 41908745. Tiene 41908545. – Joni

0

Es útil mencionar que si las palabras en cada línea del archivo está separado por delimitador, excepto el 'espacio', entonces podemos especificar delimitador utilizando la opción “-t”:

sort -n -t',' -k4 file -o outfile 

Podemos obtener salida ordenada en cualquier archivo de salida especificado (utilizando la opción "-o") en lugar de mostrar la salida en la salida estándar.

fuente: http://www.thegeekstuff.com/2013/04/sort-files/

Cuestiones relacionadas