Come posso ordinare il file in base alla seconda colonna dal terminale. Il contenuto del file è:
Nome Note
------------
Mehdi 0
Sunday 20
Others 10
Shnou 5
Usando sort -t' ' -nk2
non mi sta dando il giusto risultato. Inoltre, come posso assicurarmi che il contenuto del file rimanga ordinato?
Risposta accettata:
Penso che quello che stai cercando sia qualcosa del genere:
Metodo n. 1:usare testa e coda
$ (head -n 2 sample.txt; tail -n +3 sample.txt | sort -t' ' -nk2) > a.tmp && mv a.tmp sample.txt
Nome Note
------------
Mehdi 0
Shnou 5
Others 10
Sunday 20
Questo prende la prima riga del file di testo, quindi esegue la coda di tutto dopo le prime 2 righe che vengono quindi ordinate.
Metodo n. 2:usando solo la testa
$ (head -n 2; sort -t' ' -nk2) < sample.txt > a.tmp && mv a.tmp sample.txt
Nome Note
------------
Mehdi 0
Shnou 5
Others 10
Sunday 20
Prende il file di testo come input, mostra solo la prima riga, ordina il resto.
In genere non è una buona idea modificare i file sul posto. È possibile, ma meglio utilizzare un file intermedio.
Metodo n. 3:fare n. 2 senza un file intermedio
Rubando l'idea a @StephaneChazelas potresti fare quanto segue usando la notazione "1<>" per aprire un file per la lettura e la scrittura e i miglioramenti che ha suggerito con il sort
comando.
$ (head -n 2; sort -nk2) < sample.txt 1<> sample.txt
Nome Note
------------
Mehdi 0
Shnou 5
Others 10
Sunday 20