簡體   English   中英

如何比較bash / awk中的兩個十進制數?

[英]How to compare two decimal numbers in bash/awk?

我想比較兩個十進制值,但我收到錯誤。 我用了

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命令來舍入浮點結果,如Dennis的回復和此主題一樣,使用了以下部分修復

舍入到所需的小數位:以下將獲得TB中的遞歸目錄空間,並在第二個小數位處舍入。

result2=$(du -s "/home/foo/videos" | tail -n1 | awk '{$1=$1/(1024^3); printf "%.2f", $1;}')

然后,您可以使用上面的bash算法或使用[[ ]] enclosure,如下面的線程所示

if (( $(echo "$result1 > $result2" | bc -l) )); then
    echo "r1 > r2"
else
    echo "r1 < r2"
fi

或者使用-eq運算符,其中bc輸出為1為且0為

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

您還可以向bc echo if...else語句。

- echo $result1 '>' $result2
+ echo "if (${result1} > ${result2}) 1 else 0"

(
#export IFS=2  # example why quoting is important
result1="2.3" 
result2="1.7" 
if [ "$(echo $result1 '>' $result2 | bc -l)" -eq 1 ]; then echo yes; else echo no;fi
if [ "$(echo "if (${result1} > ${result2}) 1 else 0" | bc -l)" -eq 1 ];then echo yes; else echo no; fi
if echo $result1 $result2 | awk '{exit !( $1 > $2)}'; then echo yes; else echo no; fi
)

不能猛擊力型轉換? 例如:

($result1 + 0) < ($result2 + 0)

為什么要用bc?

for i in $(seq -3 0.5 4) ; do echo $i ; if [[ (( "$i" < 2 )) ]] ; then echo "... is < 2";fi; done

唯一的問題:比較“<”不適用於負數:它們被視為絕對值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM