2013-08-12 12 views
22

Si prega di non pensare che questa sia una ripetizione della domanda "Ordinamento dati alfanumerici in unix" ... Ho guardato le altre risposte e penso che il mio caso sia un po 'diverso!Come ordinare un file in unix sia alfabeticamente che numericamente in campi diversi?

Ho dati come questo:

A 192 
D 112 
D 188 
C 091 
A 281 
B 919 

... E voglio ordinare prima colonna 1 (in ordine alfabetico), e poi da colonna 2 (numericamente). Ho provato ad utilizzare:

sort -n -k1,2 

... Ma questo mi ha dato ordinato correttamente per il primo campo, ma poi l'ordinamento sbagliato per il secondo campo (1000,1002,1003,10,1 ... invece di 1 , 10,1000,1002,1003).

Qualcuno può suggerire come ordinare queste due colonne nel modo desiderato?

+0

sorta -k4,4n -k1,1 ???? –

+0

Devo dire che entrambe le colonne possono avere tra 1 e 50 caratteri per la loro stringa, e ogni riga è diversa – jake9115

+0

'sort -k1 -nk3 file' dovrebbe funzionare. – anubhava

risposta

28

Provare a utilizzare in questo modo: -

sort -k1,1 -k4,4n 
  • -n: rende il programma in base al tipo valore numerico
  • -k opta: Ordinare i dati/campi utilizzando il dato numero di colonna. Ad esempio, l'opzione -k 2 ha reso l'ordinamento del programma utilizzando la seconda colonna di dati
    . L'opzione -k 3,3n -k 4,4n ordina ogni colonna. Prima
    ordinerà la 3a colonna e quindi la 4a colonna.
+0

Grazie per il comando/risposta! Ho provato questo, e vedo dove stai andando con questo, ma non funziona per i miei dati, perché i valori in ogni colonna non sono una lunghezza di carattere fissa. Nel mio esempio ho usato la lunghezza del carattere 1 per column1 e 3 per column2, ma in realtà la lunghezza del carattere è compresa tra 1 e 50, a seconda della linea. C'è un modo per aggirare questo? – jake9115

+0

Ho invertito il comando per ordinare prima la colonna 2, poi la colonna 1: 'ordina -k1,1 -k4,4n' e sembra funzionare. Puoi spiegare come funziona il comando? Non ho familiarità con '-k4,4n' – jake9115

+0

@ jake9115: - Aggiornato la mia risposta con la spiegazione di entrambi. Spero che questo aiuti :) P.S. Non dimenticare di accettare questa risposta come risposta, se questo ti ha davvero aiutato;) –

6

Questo dovrebbe funzionare:

sort -t "," -k1,1 -k2n,2 file 
Problemi correlati