2014-09-23 40 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