シェルスクリプト - 配列の最大値を返す方法は?

シェルスクリプト - 配列の最大値を返す方法は?

配列があります。

ARRAY=(12.5 6.2)

ARRAYの最大値を返したいです。出力は12.5です。

誰でも私の考えを共有できますか?

私はこれを試しました:

max=0
for v in ${ARRAY[@]}; do
    if (( $v > $max )); then max=$v; fi; 
done
echo $max

しかし、それは私に返されます:

((: 12.5 > 0 : syntax error: invalid arithmetic operator (error token is ".5 > 0 ")
((: 6.2 > 0 : syntax error: invalid arithmetic operator (error token is ".2 > 0 ")

ベストアンサー1

printf '%s\n' "${ARRAY[@]}" |
awk '$1 > m || NR == 1 { m = $1 } END { print m }'

シェルは浮動小数点演算を実行しないため、bash他の言語の浮動小数点数を比較する方が簡単です。ここでは、awk配列内のすべての要素の最大値を見つけるために使用していますARRAY

このprintfコマンドは配列の各要素を独自の行に出力し、awkコードはその値をmこれまでに示された最大値に更新します。最後にm値を印刷します。

プログラムが読み取った最初の行のテストNR == 1はtrueで、awk値をm配列の最初の値に初期化します。 (これは失敗しました。つまり、コードは0すべての負の配列を返すので効果的です)。

おすすめ記事