Устранение неполадок в Bash: неверный идентификатор
Здесь новичок пытается запустить конвейер в 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
Идея состоит в том, чтобы для каждой строки в регионов текстового файла (который содержит координаты генома) запустить программу под названием tabix
в vcf.bz
файл, затем с выходным запуском vcftools
с указанными параметрами, затем поместите все выходы в genomesregions.txt
файл.
2 ответа
Это должно быть так:
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
То же самое и без кота:
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"