Устранение неполадок в 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"
Другие вопросы по тегам