所以我的目录中有两个文件,每个文件都包含一个数字。我想制作一个计算这两个数字平均值的脚本。我该怎么写呢?这是正确的吗?
avg=$((${<file1.txt}-${<file2.txt})/2)
答案 0 :(得分:1)
您的示例不起作用。此外,您的公式可能不正确。以下是两个没有必要cat
的选项:
avg=$(( (`<file1.txt` + `<file2.txt`) / 2 ))
或
avg=$(( ($(<file1.txt) + $(<file2.txt)) / 2 ))
我发现第一个更具可读性。还要注意:当您的文件包含的不仅仅是普通数字时,这种简单的方法会导致问题。
编辑:
我应该注意到,不再推荐使用反引号(``)的第一个语法/遗留选项,应该避免使用。您可以在此处详细了解WHY。感谢 mklement0 获取链接!
EDIT2:
根据Eric的说法,这些值是浮点数。你不能直接在bash中这样做,因为只支持整数。你必须使用一个小帮手:
avg=$(bc <<< "( $(<file1.txt) + $(<file2.txt) ) / 2")
或者更容易理解
avg=$(echo "( $(<file1.txt) + $(<file2.txt) ) / 2" | bc)
对于那些可能想知道bc
是什么的人(请参阅man bc
):
bc是一种支持任意精度数的语言 交互式执行报表。
这是另一种选择,因为默认情况下通常会安装perl
:
avg=$(perl -e 'print( ($ARGV[0] + $ARGV[1]) / 2 )' -- $(<file1.txt) $(<file2.txt))
答案 1 :(得分:0)
您想要使用command substitution:
avg=$(($(cat file1.txt)-$(cat file2.txt)/2))
然而,Bash是一门非常糟糕的数学语言(至少除非它是完全整数的数学)。您可能希望查看bc
或&#34;真实&#34;像Python这样的语言。