2つの小数値を比較しようとしていますが、エラーが発生しています。使った
if [ "$(echo $result1 '>' $result2 | bc -l)" -eq 1 ];then
他のStack Overflowスレッドで提案されているとおり。
エラーが発生しています。
これについて正しい方法は何ですか?
Bashの数値コンテキストを使用して実行できます。
if (( $(echo "$result1 > $result2" | bc -l) )); then
bc
は0または1を出力し、(( ))
は、それらをそれぞれfalseまたはtrueとして解釈します。
AWKを使用した同じこと:
if (( $(echo "$result1 $result2" | awk '{print ($1 > $2)}') )); then
if awk 'BEGIN{exit ARGV[1]>ARGV[2]}' "$z" "$y"
then
echo z not greater than y
else
echo z greater than y
fi
デニスの返信のフォローアップ:
彼の応答は小数点に対しては正しいですが、bashは(standard_in)1:浮動小数点演算で構文エラーをスローします。
result1=12
result2=1.27554e-05
if (( $(echo "$result1 > $result2" | bc -l) )); then
echo "r1 > r2"
else
echo "r1 < r2"
fi
これは、終了コードが0であるにもかかわらず、警告とともに誤った出力を返します。
(standard_in)1:構文エラー
r1 <r2
これに対する明確な解決策はありませんが(議論 スレッド1 および スレッド2 )、次の部分的な修正を使用し、awk
を使用して浮動小数点の結果を四捨五入しました。デニスの返信のようにbc
コマンドを使用し、 このスレッド
希望の小数点以下の桁数に丸める:以下は、TBの小数点以下2桁を丸めて、再帰的なディレクトリスペースを取得します。
result2=$(du -s "/home/foo/videos" | tail -n1 | awk '{$1=$1/(1024^3); printf "%.2f", $1;}')
次に、上記のようにbash算術を使用するか、 スレッドの追跡 のように[[ ]]
エンクロージャーを使用できます。
if (( $(echo "$result1 > $result2" | bc -l) )); then
echo "r1 > r2"
else
echo "r1 < r2"
fi
または-eq
演算子を使用して、1のbc
出力はtrueであり、0はですfalse
if [[ $(bc <<< "$result1 < $result2") -eq 1 ]]; then
echo "r1 < r2"
else
echo "r1 > r2"
fi
if [[ `echo "$result1 $result2" | awk '{print ($1 > $2)}'` == 1 ]]; then
echo "$result1 is greater than $result2"
fi