配列内の2番目に大きい値を見つける

配列内の2番目に大きい値を見つける

次のような配列があります。

array=(1 2 7 6)

2番目に大きい値を取得したい場合、出力は次のようになります。

secondGreatest=6

Bashでこれを行う方法はありますか?

ベストアンサー1

printf '%s\n' "${array[@]}" | sort -n | tail -2 | head -1

配列の各値を1行に印刷し、並べ替え、最後の2つの値を取得し、最後の値を削除します。

secondGreatest=$(printf '%s\n' "${array[@]}" | sort -n | tail -2 | head -1)

値をsecondGreatest変数に設定します。


数字の繰り返しについてのGlenn Jackmanの指摘は素晴らしいですが、私はそれを考慮しませんでした。一意の値にのみ興味がある場合は、-uソートフラグを使用できます。

secondGreatest=$(printf '%s\n' "${array[@]}" | sort -nu | tail -2 | head -1)

おすすめ記事