web-dev-qa-db-ja.com

シェルスクリプトでの並べ替え

私は配列を持っています

arr=( x11 y12 x21 y22 x31 y32)

この配列を次のように並べ替える必要があります

x11 x21 x31 y12 y22 y32

だから、アルファベットと数字の両方で並べ替える必要があります

シェルスクリプトでこれを実行するにはどうすればよいですか?

[ $i -le $j ]を使用すると、「整数式が必要です」と表示されます。

また、文字列には、x.1.1または1.x.1の他の文字も含まれる場合があります。

これを行うにはどうすればよいですか?

10
user691197

最初に配列要素を行に分割します(ほとんどの* nixプログラムは行でのみ機能します):

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

次に、行を並べ替えます。

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

これで、それを配列に再度割り当てることができます。

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

ビンゴ:

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

これらすべてがどのように機能するか、そしてそれがあなたが望むことを正確に行わない場合にそれを変更する方法を理解するには、manページ:

man bash
man sort

BASHで配列をソートする方法 も参照してください。

20
l0b0