次のような配列があります。
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)