2012-03-01 33 views
9

Mam tablicęsortowanie w skrypcie powłoki

arr=(x11 y12 x21 y22 x31 y32) 

muszę uporządkować tę tablicę do

x11 x21 x31 y12 y22 y32 

Więc muszę uporządkować zarówno w kolejności alfabetycznej i liczbowej mądry

Jak to zrobić wykonać to w skrypcie powłoki?

Jeśli użyję [ $i -le $j ], pojawi się "oczekiwane wyrażenie całkowite".

Ciągi mogą zawierać również inne znaki: x.1.1 lub 1.x.1.

Jak to zrobić?

+0

Czy próbowałeś "sortować"? – l0b0

+0

możesz podać pełną składnię, jestem początkującym – user691197

+0

Możliwy duplikat [Jak sortować tablicę w BASH] (http://stackoverflow.com/questions/7442417/how-to-sort-an-array- in-bash) –

Odpowiedz

18

Pierwszy podzielić elementy tablicy na linie (większość * Programy nix pracować tylko z liniami):

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

Następnie posortować wiersze:

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

Teraz można przypisać, że do tablicy ponownie :

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

Bingo:

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

Aby zrozumieć, jak to wszystko działa i jak go zmienić, jeśli nie zrobić precyzyjnie co chcesz, spojrzeć na stronach man:

man bash 
man sort 

Zobacz również How to sort an array in BASH.

+0

Dzięki to zadziałało! – user691197

+0

Czy możesz podać tę samą składnię powłoki c? Napis "Missing -" po uruchomieniu przez cshell. – user691197

+0

Powinieneś był to określić w tagach lub pytaniu. Nie znam CSH. – l0b0