сортировка в скрипте оболочки - PullRequest
10 голосов
/ 01 марта 2012

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

arr=( x11 y12 x21 y22 x31 y32)

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

x11 x21 x31 y12 y22 y32

Итак, мне нужно отсортировать как по алфавиту, так и по цифрам

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

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

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

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

1 Ответ

20 голосов
/ 01 марта 2012

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

...