我一直在编写一个bash脚本,用于计算两个文件的值之间的错误拒绝率。 file1.txt 和 file2.txt 这两个文件都包含二进制值。所有错误都已修复,但输出 0 。我不知道我是否在不知不觉中在我的剧本中犯了任何错误,因为我在编写shell脚本方面非常新,并且还没有掌握它们。
#!/bin/bash
nfr=0
ns=0
frr=0
while read file1 <&3 && read file2 <&4; do
if [$file1 == "1" ]
then
let "ns++"
fi
if [ "$file1" == "1" ] && [ "$file2" != "1" ]
then
let "nfr++"
else
continue
fi
done 3< ./file1.txt 4< ./file2.txt
let frr="((nfr / ns) * 100)"
echo $frr
FILE1.TXT :
2
2
2
2
1
1
1
1
1
2
1
1
2
2
FILE2.TXT :
2
2
2
2
2
2
1
1
1
2
1
1
2
2
答案 0 :(得分:0)
主要问题是shell使用整数运算,因此你的除法总是被截断为零。
您的脚本有语法错误([
后没有空格),并且它没有对[
... ]
表达式中的变量引用进行双重引用,这会导致语法错误如果输入文件中有空行。
如果已安装,您可以使用dc
进行任意精度算术。
这是我的版本:
#!/bin/bash
declare -i nfr=0
declare -i ns=0
while read file1 <&3 && read file2 <&4; do
if [ "$file1" == "1" ]
then
let "ns++"
if [ "$file2" != "1" ]
then
let "nfr++"
fi
fi
done 3< ./file1.txt 4< ./file2.txt
# this will remove the decimal fraction
echo $((nfr * 100 / ns))
# this will print the value with a precision of 5
precision=5
echo "$precision k$nfr $ns/100*p" | dc