Sto usando unix sort per ordinare un file delimitato da virgole con più colonne. Finora, questo ha funzionato perfettamente per ordinare i dati in ordine numerico o in ordine alfabetico:
File di esempio prima di qualsiasi ordinamento:
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
Ordina il file: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Risultato ordinato:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
Ecco il problema: voglio ordinare la colonna 2 in base a un ordinamento personalizzato, il che significa che voglio prima gli Stati Uniti, poi il Canada, quindi le Bahamas:
Ordinamento desiderato:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
C'è un modo per passare unix ordinamento un ordinamento personalizzato che può quindi applicare? Qualcosa di simile a:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Grazie!
t
invece f
nell'ultima riga?
join
comando, ma potresti finire con un sacco di ordinamento: i file di input perjoin
devono essere ordinati in un ordine, e quindi useresti disort
nuovo per inserire i dati in un ordine diverso (e perdere la colonna di ordinamento come passaggio post-ordinamento).