2010-06-24 13 views
8

Vorrei riordinare un intero file in ordine crescente di tempo.Come posso riordinare un file in ordine ascendente (colonna)?

file.txt assomiglia a questo:

a 12.24 text 

a 1.45 text 

b 5.12 text 

Vorrei a questo aspetto:

a 1.45 text 

b 5.12 text 

a 12.24 text 
+0

Perché utilizzare awk quando è possibile utilizzare Python? Inoltre, questo è un formato 24 ore? –

+1

Prova questo one-liner in Python 2.6: open (r'temp2.txt ',' w '). Writelines (ordinato (aperto (r'temp.txt', 'r'). Readlines(), key = lambda line : float (line.split() [1]))) –

risposta

7

Utilizzare il programma sort Linux, non awk. Precisamente:

sort -n -k 2 <filename> 
+1

Per chiarire, la differenza tra -n e -g è spiegata qui: http://stackoverflow.com/questions/1255782/whats-the-difference-between- generale-numerico-ordinamento-e-numerico-ordinamento-opzioni-i. – mbq

+0

Si noti che questo presuppone che i tempi siano nel formato 24 ore. – Costa

15

Il comando sort può soddisfare le vostre esigenze meglio di awk.

# sort -gk 2 test.txt 
a 1.45 text 
b 5.12 text 
a 12.24 text 

-g li confronta come numeri invece di stringhe. E -k 2 ordina sulla seconda colonna.

+0

Si noti che questo presuppone che i tempi siano nel formato 24 ore. – Costa

+0

Se due righe possono avere lo stesso tempo, '-k2' ricadrà sul confronto di intere linee per ordinarle. Aggiungendo un '-s' si spegnerebbe questa stranezza. – hemflit

Problemi correlati