сортировка в shell-скрипт

у меня есть массив

arr=( x11 y12 x21 y22 x31 y32)

мне нужно отсортировать этот массив в

x11 x21 x31 y12 y22 y32

Итак, мне нужно отсортировать как алфавитный, так и числовой мудрый

Как выполнить это в сценарии оболочки ?

если я использую [ $i -le $j ], Он говорит: "ожидается выражение целого".

и строки также могут содержать другие символы:x.1.1 или 1.x.1.

как мне это сделать ?

1 ответов


сначала разделите элементы массива на строки (большинство программ * 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

см. также как сортировать массив в Баш.