HOWTO · Bash

Bashで配列を並べ替える

このチュートリアルでは、Bash での配列の並べ替えについて説明します。

配列のソートは、どのプログラミング言語でも非常に一般的なタスクです。 Bash スクリプトでは、このタスクを 2つの異なる方法で実行することもできます。

1つ目は任意のソート アルゴリズムを使用し、2つ目は readarray という名前の Bash スクリプトの組み込みキーワードを使用します。 この記事では、Bash スクリプトで配列をソートする方法を示します。

また、トピックをより簡単にするために、いくつかの例と説明を示します。

Bashでバブルソートを使用して配列をソートする

Bash スクリプトでは、バブル ソート、マージ ソートなどのソート アルゴリズムを使用して配列をソートできます。以下の例では、配列をソートするためにバブル ソートを実装しました。

この例のコードは次のようになります。

MyArray=(9 8 20 10 15)

echo "The original array is:"
echo ${MyArray[*]}

# We implemented the bubble sort here.
for ((i = 0; i<5; i++))
do

    for((j = 0; j<5-i-1; j++))
    do

        if [ ${MyArray[j]} -gt ${MyArray[$((j+1))]} ]
        then
            # swap
            temp=${MyArray[j]}
            MyArray[$j]=${MyArray[$((j+1))]}
            MyArray[$((j+1))]=$temp
        fi
    done
done

echo "The sorted array is:"
echo ${MyArray[*]}

上記の例を1行ずつ説明しましょう。

  1. まず、配列名 MyArray を宣言しました。
  2. その後、echo ${MyArray[*]} 行で配列を表示しました。
  3. その後、2つのループを作成し、バブル ソートを実装しました。 これらのループ内で、現在の要素が次の要素より大きいかどうかを確認する条件を作成しました。
  4. 条件が true になった場合、配列のこれら 2つの要素の間でスワップ操作を実行しました。
  5. 最後に、並べ替えが完了したときに配列を表示しました。 上記のプログラムを実行すると、以下のような出力が得られます。
The original array is:
9 8 20 10 15
The sorted array is:
8 9 10 15 20

readarray キーワードを使用して Bash で配列をソートする

アルファベットと数字が混在する配列があるとします。 この配列をソートするには、さまざまな方法を見つける必要があります。

この配列でソートを実行するには、文字の ASCII 値を比較する必要があります。

Bash スクリプトの組み込みキーワードを使用すると、これを 1 行のコードで実行できます。 キーワードは readarray です。

以下の例では、アルファベットと数字を組み合わせた配列を作成しました。 readarray キーワードを使用して配列をソートした後、ソートされた配列を表示しました。

この例のコードは次のようになります。

MyArray=(n a c b 6 7 5)
readarray -t MyArray < <(printf '%s\n' "${MyArray[@]}" | sort)
echo "The sorted list is: ${MyArray[*]}"

スクリプトを実行すると、以下のような出力が得られます。

The sorted list is: 5 6 7 a b c n

この記事で使用するコードはすべて Bash で記述されていることに注意してください。 Linux シェル環境でのみ動作します。