2012-06-19 59 views
2

初學者在這裏試圖讓管道在bash工作。如果有人能看到爲什麼當我運行以下我得到:擊故障排除:不是有效的標識符

-bash: `$i': not a valid identifier, 

這將是非常有益的。此外,如果有其他錯誤,請讓我知道

for $i in /home/regionstextfile; do tabix /sequences/human_variation/snps/genotypes.vcf.gz $i | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt; done 

的想法是在regionstextfile每行(包含基因組座標)運行在vcf.bz文件名爲tabix程序,然後與輸出運行vcftools與指定選項,然後將所有輸出放入genomesregions.txt文件中。

+0

執行行包含空格(空格或製表符)? – jedwards

回答

7

那一定是這樣:

for i in `</home/regionstextfile` 
do 
    tabix /sequences/human_variation/snps/genotypes.vcf.gz $i | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt 
done 

當你使用一個變量(例如賦值給它或導出,或做任何事情,但與變量本身)你寫它的名字沒有$;當你使用你寫的變量的值$

編輯:

當區域名稱中包含空格,但每個區域是在一個單獨的線,你需要while

cat /home/regionstextfile | while read i 
do 
    tabix /sequences/human_variation/snps/genotypes.vcf.gz "$i" | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt 
done 
+1

只要在文本文件的行不包含空格,這應該工作。 – jedwards

+0

@jedwards:你說得對,很好的提示,謝謝! –

+0

感謝您的快速回復,現在就進行測試 – user964689

1

沒有貓同樣的事情:

while read i 
do 
    tabix /sequences/human_variation/snps/genotypes.vcf.gz "$i" | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt 
done < /home/regionstextfile 

備註<file.txt不能工作,除非IFS = ''

OLDIFS="$IFS" 
IFS='' 
for i in `</home/regionstextfile` 
do 
    tabix /sequences/human_variation/snps/genotypes.vcf.gz $i | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt 
done 
IFS="$OLDIFS"