2012-01-26 14 views
20

Ho un file come questo (che è delimitato spazio):come utilizzare il comando Linux Ordina per ordinare il file di testo in base alla quarta colonna, ordine numerico?

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 

e voglio usare sort comando per ordinare i file in base al 4 colonna. Ho cercato ovunque su internet e ho trovato diverse soluzioni su cui funziona nun !! Ho anche trovato una domanda simile in StackOverflow che la risposta non ha funzionato per me! quindi questi sono i comandi che sto usando e non funzionano!

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 

così dopo aver eseguito tutti questi comandi che ricevo questa uscita (che è identico al mio ingresso):

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 

voglio ottenere un output simile a questo:

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

se si desidera ulteriori informazioni, vi consiglio di definire cosa accade, e quello che ci si aspetterebbe invece – sehe

+0

41.908.545 è inferiore a 41908741. Vuoi ordinare i numeri dalla loro cifre meno significative ? – Joni

+1

Puoi spiegare quale regola provoca l'ordinamento preferito di '41908740',' 41908741', '41908545'? Sembra che ci sia ** no ** per quelli. – wallyk

risposta

34
sort -nk4 file 

-n for numerical sort 
-k for providing key 

o aggiungere -r option per la retromarcia l'ordinamento

sort -nrk4 file 
1

E ' dovrebbe essere

sort -k 4n out1.txt 

Jus t testato questo con GNU sort (--debug abilitato):

$ 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, non funziona anche! – mahmood

6

sort non ordinare il file sul posto. Esegue invece una copia ordinata.

È necessario sort -n -k 4 out.txt > sorted-out.txt.

Edit: per ottenere l'ordine che si desidera è necessario ordinare il file con i numeri lette in senso inverso. Questo lo fa:

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

+0

Non funziona neanche! – mahmood

+0

Ma i tuoi dati non hanno 41908745. Ha 41908545. – Joni

0

E 'utile ricordare che se le parole di ogni riga del file è separato da delimitatore tranne 'spazio', allora possiamo specificare delimitatore utilizzando l'opzione “-t”:

È possibile ottenere l'output ordinato in qualsiasi file di output specificato (utilizzando l'opzione "-o") anziché visualizzare l'output sullo standard output.

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

Problemi correlati