2013-02-01 83 views
1

我想在linux中執行以下練習。 Impute2是基於命令行的軟件。我想使用for-loops自動改變它的選項,但是在** bold **中拋出下面的錯誤。在shell腳本中使用多個for循環時出現語法錯誤

對於每個** $塊**,-int選項是從** $ int1到$ int2 **的範圍。

這意味着在這裏對於塊34,int將從165752599到170752599(差值5000001),並且對於塊35,int將會是170752600到175752600等等直到最後塊,即塊49和它的int將是240752614到245752614.

for chunk in $(seq 34 49) 
for int1 in $(seq 165752599 5000001 240752614) 
for int2 in $(seq 170752599 5000001 245752614) 
do ./impute2 -use_prephased_g -m map.txt -h hap.txt -l legend.txt \ 
    -known_haps_g knownhap.txt -strand_g chr1_pos_strand_new \ 
    -align_by_maf_g -int $int1 $int2 -Ne 20000 -iter 30 -burnin 10 \ 
    -k 80 -k_hap 500 -os 0 1 2 3 -o result.out -o_gz -r result.summary \ 
    -i resul.info 
done 
done 
done 

**擊: '爲' 語法附近意外的標記錯誤**

+2

正確的語法for'for'是for ...; *一路下來*,沒有'do'就不能擁有'for'。 –

+1

粘貼後你看過代碼的格式嗎?這是一個難以理解的混亂的大牆... – 2013-02-01 19:52:36

+0

是的,你似乎有3爲1和3完成的。這肯定會有問題 – TopGunCoder

回答

1

你有3 for秒和3 done秒,但只有一個do。你需要更多do-do

ie,for x in a; do for y in b; do for z ...

+0

此代碼無法正常工作。在這裏,每個$ chunk都是34,35,36。$ int1和$ int2應該同時改變。因此,當$ chunk = 34時,則$ int1 = 165752599和$ int2 = 170752599.當$ chunk = 35時,則$ int1 = 170752600和$ int2 = 175752600.當$ chunk = 36時,則$ int1 = 175752601和$ int2 = 180752601. int1和int2應始終有5000000的差異。 –

+0

您的邏輯不正確。你不希望......中的大塊;在int1中做...;在...中爲int2做...;'。你只需要一個for循環:'用於......中的塊;做int1 = $((...)); int2 = $((...))); ...; done' –