2012-03-01 12 views
9

tengo una matrizde clasificación en shell script

arr=(x11 y12 x21 y22 x31 y32) 

necesito para ordenar esta matriz a

x11 x21 x31 y12 y22 y32 

Por lo tanto, hay que solucionar tanto alfabético y numérico sabia

¿Cómo realizar esto en script de shell?

Si uso [ $i -le $j ], dice "expresión entera esperada".

Y las cadenas pueden contener otros caracteres también: x.1.1 o 1.x.1.

¿Cómo puedo hacer esto?

+0

¿Has probado 'sort'? – l0b0

+0

me puede dar la sintaxis completa, soy un principiante – user691197

+0

Posible duplicado de [Cómo ordenar una matriz en BASH] (http://stackoverflow.com/questions/7442417/how-to-sort-an-array- in-bash) –

Respuesta

18

Primero divide los elementos de la matriz en líneas (la mayoría de * programas nix funcionan sólo con líneas):

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

Luego, ordenar las líneas:

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

Ahora se puede asignar dicha a un array de nuevo :

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

Bingo:

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

Para entender cómo funciona todo esto, y cómo cambiarlo si no lo hace, precisamente, lo que quiere, echar un vistazo a las páginas man:

man bash 
man sort 

Ver también How to sort an array in BASH.

+0

¡Gracias funcionó! – user691197

+0

¿Puede darme la misma sintaxis para un shell c? Dice "Missing -" cuando se ejecuta a través de cshell. – user691197

+0

Deberías haber especificado eso en las etiquetas o en la pregunta. No sé CSH. – l0b0