2014-09-23 129 views
0

在循环内我有一个变量用于计算,使用另一个变量的bc。 但是,我得到的结果完全不正确。我有32个文件,分别命名为test0,test1等。 我的脚本内容如下:如何在for循环中使用bc

for i in {0..31}; do 
    declare x$i=$(wc -l < test$i) 
    declare y$i=$(echo $x$i/10 | bc) 
done 

为变量x,我得到了很好的效果,即,每个x$i店记者test$i的行数。然后我想简单地知道多少是每个x$i的10%并将其存储在变量y$i中。而且,正如我上面所说的,我使用该脚本得到完全错误的结果。 例如,对于x0 = 155287510我得到y0 = 20。

+0

你会得到什么样的结果?你期待什么结果?什么是'测试$我'? – terdon 2014-09-23 10:35:10

+0

@terdon我刚编辑我的问题 – ziulfer 2014-09-23 10:42:25

+0

也许你需要设置'scale' ....'echo“scale = 2; 10/3”| bc' – 2014-09-23 10:45:34

回答

6

的问题是,$x$i不是一个名为x$i变量的值,但变量xi值的连环。

你可以很容易地将你的脚本转换为使用Bash数组,但是好像你在Awk中更好。

declare -a x 
declare -a y 
for i in {0..31}; do 
    x[$i]=$(wc -l < test$i) 
    y[$i]=$(echo "${x[$i]}"/10 | bc) 
done 

如果你只是想从计算的结果,

wc -l test[0-9] test[12][0-9] test3[01] | 
awk '{$1 /= 10 }1' 
+0

我认为它甚至不值得在每个循环迭代中产生'bc',当shell将愉快地除以10自己'y [$ i] = $(($ {x [$ i]}/10)) '。 (当然如果需要十进制结果,'bc'会更有用。) – 2014-09-23 18:01:21

+0

或者如果你不关心舍入,只需放下最后一位数字 - '$ {x [$ i]%?}' – tripleee 2014-09-25 03:14:22

+0

我认为但它会导致1位数字的空字符串 – 2014-09-25 03:16:24