2013-07-02 13 views
19

Sto cercando di ordinare questo file in base alla quarta colonna. Voglio che il file venga riordinato in base ai valori della quarta colonna.Ordinare un file delimitato da tabulazione in base al comando di ordinamento delle colonne bash

File:

2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 
1 1:10363487:T 0 10363487 

voglio farlo ordinati in questo modo:

1 1:10363487:T 0 10363487 
2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 

Ho provato questo comando:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename> 

Ma ottengo l'errore nome di variabile illegale. Qualcuno può aiutarmi con questo?

risposta

44

Per ordinare sulla quarta colonna utilizzare solo il selettore -k 4,4.

sort -t $'\t' -k 4,4 <filename> 

Si potrebbe anche voler -V che ordina numeri in modo più naturale. Ad esempio, ottenendo 1 2 10 anziché 1 10 2 (ordine lessicografico).

sort -t $'\t' -k 4,4 -V <filename> 

se stai ricevendo gli errori sul $'\t' quindi assicurarsi che la shell è bash. Forse ti manca #!/bin/bash nella parte superiore del tuo script?

+0

stesso errore anche se .. illegale nome di variabile. Non so come risolverlo. So che il problema è con $ – Vignesh

+1

Assicurati di usare bash e non '#!/Bin/sh' o' sh script' –

+2

Inoltre, l'opzione '-t' sarebbe facoltativa qui, poiché il separatore di colonna predefinito di "qualsiasi spazio bianco" sarebbe sufficiente per il tuo file. – chepner

3

Credo che tu abbia un errato $ nel tuo comando.

Prova:

sort -t\t -nk4 
+2

'$ '..'' è la sintassi di bash per l'espansione delle sequenze di escape. In questo caso si espande in una scheda letterale. –

+0

che ha aiutato ma non posso ordinare come 1 2 10 di 1 10 2 22 ?? – Vignesh

+1

Questo è ciò che il flag '-n' dovrebbe fare (ordinamento numerico). – Phylogenesis

Problemi correlati