2012-03-01 21 views
9

Ho un allineamentol'ordinamento in script di shell

arr=(x11 y12 x21 y22 x31 y32) 

ho bisogno di ordinare questo array a

x11 x21 x31 y12 y22 y32 

Così, ho bisogno di ordinare sia alfabetico e numerico saggio

Come faccio eseguire questo nello script di shell?

Se si utilizza [ $i -le $j ], viene indicato "espressione intera prevista".

E le stringhe possono contenere anche altri caratteri: x.1.1 o 1.x.1.

Come posso fare?

+0

Hai provato a 'ordinare'? – l0b0

+0

puoi darmi la sintassi completa, sono un principiante – user691197

+0

Possibile duplicato di [Come ordinare un array in BASH] (http://stackoverflow.com/questions/7442417/how-to-sort-an-array- in-bash) –

risposta

18

Prima diviso gli elementi dell'array in linee (la maggior parte * programmi nix funzionano solo linee):

for el in "${arr[@]}" 
do 
    echo "$el" 
done 

quindi ordinare le righe:

for el in "${arr[@]}" 
do 
    echo "$el" 
done | sort 

Ora è possibile assegnare che ad un array di nuovo :

arr2=($(
    for el in "${arr[@]}" 
    do 
     echo "$el" 
    done | sort)) 

Bingo:

$ echo "${arr2[@]}" 
x11 x21 x31 y12 y22 y32 

Per capire come tutto questo funziona, e come cambiarlo se non fa esattamente ciò che si vuole, dare un'occhiata alle pagine man:

man bash 
man sort 

Vedi anche How to sort an array in BASH.

+0

Grazie ha funzionato! – user691197

+0

Puoi darmi la stessa sintassi per una shell c. Dice "Manca -" quando viene eseguito attraverso cshell. – user691197

+0

Dovresti averlo specificato nei tag o nella domanda. Non conosco CSH. – l0b0