我需要計算一個檔案(Case1.log)中的一些數值,該檔案包含,
我需要計算一個檔案(Case1.log)中的一些數值。
故障類#faults。
(總數)
------------------------------------------------------------------------------------- --------------
FU(全) 3186
----------------------------------------------------------------------------------- --------------
DS (det_simulation) 1625 (51.00%)
DI (det_implication) 393 ( 12.34%)
PU (posdet_untestable) 123 ( 1.32%)
PT (posdet_testable) 420 ( 2.43%)
UU (未使用) 210 ( 6.59%)
TI (并列) 52 ( 1.63%)
BL (阻塞) 4 ( 0.13%)
RE (多余的) 9 ( 0.28%)
AU (atpg_untestable) 893 ( 28.03%)
我使用bash腳本從上述檔案中提取了數值,如下所示:
DS=$(grep DS $1 | awk -F " " '{print 3" "}')
echo "DS=$DS"。
DI=$(grep DI $1 | awk -F " " '{print 3" "}')
echo "DI=$DI"
UU=$(grep UU $1 | awk -F " " '{print 3" "}')
echo "UU=$UU"
TI=$(grep TI $1 | awk -F " " '{print 3" "}')
echo "TI=$TI"。
BL=$(grep BL $1 | awk -F " " '{print 3" "}')
echo "BL=$BL"。
RE=$(grep RE $1 | awk -F " " '{print 3" "}')
echo "RE=$RE"。
PU=$(grep PU $1 | awk -F " " '{print 3" "}')
echo "PU=$pu"
PT=$(grep PT $1 | awk -F " " '{print 3" "}')
echo "PT=$PT"。
FU=$(grep FU $1 | awk -F " " '{print 3" "}')
echo "FU=$FU"
現在我需要使用提取的值來計算一個方程式,
NU = expr $DS $DI $PT $PU
DE = expr $FU - $UU - $TI - $BL - $RE | bc-l
結果 = expr $NU / $DE *100
echo $Result *100
在運行腳本時
bash Script.sh Case1.log
$NU, $DE & $結果顯示錯誤文本為
。DS=1625
DI=393
UU=210
TI=52
BL=4
RE=9
PU=123
PT=420
FU=3186
2561
2911
expr: 缺少運算元
嘗試'expr --help' for更多資訊。
/
expr: 語法錯誤: 引數'case1.log'超出預期
uj5u.com熱心網友回復:
完全用awk來做:
#!/usr/bin/env -S awk -f
#決議含有兩個大寫字母的鍵的記錄。
$1 ~ /[A-Z]{2}/ {
# 用捕獲的鍵和值填充關聯陣列。
a[$1] =$3
# 為除錯目的
printf("%s = %s
", $1, $3)
}
END {
# 現在所有的值都已經被捕獲到關聯陣列中,
# 執行計算。
NU = a["DS"/span>] a["DI"/span>] a["PT"/span>] a["PU"/span>]
DE = a["FU"/span>] - a["UU"/span>] - a["TI"/span>] - a["BL"/span>] - a["RE"/span>]
結果 = 100 * NU / DE
printf("
NU = %d
DE = %d
", NU, DE)
printf("100 * NU / DE = %f
", result)
}
將上面的awk腳本保存為nuderatio,并且
使其可執行 chmod x nuderatio
并運行它
./nuderatio Case1.log
從你的樣本Case1.log得到的輸出:
FU = 3186
DS = 1625
DI = 393
PU = 123
PT = 420
UU = 210
TI = 52
BL = 4
RE = 9
AU = 893
NU = 2561
DE = 2911
100 *NU / DE = 87.976640
在Bash中完全一樣:
#!/usr/bin/env bash
declare -A a
while read -r k _ v _ || [[ $k ]]; do
[[ "$k" =~ [A-Z]{2}]. ]] ||繼續
a[$k]="$v"。
printf '%s = %s
' "$k" "$v"
done < "$1"。
NU=$((a["DS"] a["DI"] a["PT"] a["PU"])
DE=$((a["FU"] - a["UU"] - a["TI"] - a["BL"] - a["RE"])
# Precision decimals10**p * 100 * NU / DE)
result="${r:0:$((${#r} - p))}.${r: -$p}"/span>
printf '
NU = %d
DE = %d
' $NU $DE
LC_ALL=C printf '100 * NU / DE = %f
' "$result"
uj5u.com熱心網友回復:
在UNIX/Linux shells中,有兩種簡單的方法來進行計算。$((...))和awk。
$((...))非常簡單:
Prompt> echo $((1 2*3)
7
然而,它只包括整數計算:
Prompt> echo $((3/5)
所以,一旦涉及到浮點運算,建議使用另一個系統,比如awk:
Prompt> awk '{print 3/5}'/span>
0.6
哦,就百分比而言:整數運算有一個小小的缺點,你可以看到(3/5是多少百分比):
Prompt> echo $((100 * 3 / 5)
60
Prompt> echo $((3 / 5 * 100)
0
(首先,3/5得到計算,是0,...)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/307706.html
標籤:
