2015-10-16 58 views
0

我想grep for循環中每個循環的特定行。我已經在互聯網上看到了我的問題的答案,我嘗試了它們,但它似乎不適合我...而且我沒有發現我做錯了什麼。for循環中的grep變量

下面是代碼:

for n in 2 4 6 8 10 12 14 ; do 
    for U in 1 10 100 ; do 
     for L in 2 4 6 8 ; do 
i=0 
cat results/output_iteration/occ_"$L"_"$n"_"$U"_it"$i".dat 
for k in $(seq 1 1 $L) ; do 
     ${'var'.$k}=`grep " $k " results/output_iteration/occ_"$L"_"$n"_"$U"_it"$i".dat | tail -n 1` 
done 

這給了我:

% 
% 
% site density  double occupancy     
    1  0.49791021  0.03866179 
    2  0.49891438  0.06077808 
    3  0.50426102  0.05718336 
    4  0.49891438  0.06077808 
./run_deviation_functionL.sh: line 109: ${'var'.$k}=`grep " $k " results/output_iteration/occ_"$L"_"$n"_"$U"_it"$i".dat | tail -n 1`: bad substitution 

然後,我想只拿密度數字,喜歡的東西:

${'density'.$k}=`echo "${'var'.$k:10:10}" | bc -l` 

任何人都知道它失敗的原因?

回答

2

使用declare從變量創建變量名:

declare density$k="`...`" 

使用變量間接檢索它們:

var=var$k 
echo ${!var:10:10} 
+0

所以,如果我深知,我所要做的'聲明變量$ K = 'grep「$ k」file.dat |尾巴-n 1'?但是當我這樣做,我有這種錯誤:./run.sh:行109:聲明:1:不是一個有效的標識符 ./run.sh:行109:聲明:0.49791021:不是一個有效的標識符 ./run.sh:第109行:聲明:「0.03866179」:不是有效的標識符 –

+0

而當我做的時候var = var $ k,echo $ var;它給了我「var1」,「var2」...而不是我想grep的行 –

+0

@B_runo:如果涉及空格,雙引號'...':'declare var $ k =「'... '「''。 – choroba