Bash troubleshooting: Not a valid identifier
Pregunta
Beginner here trying to get a pipeline working in bash. If somebody can see why when I run the following I get:
-bash: `$i': not a valid identifier,
that would be really helpful. Also if there are other mistakes please let me know
for $i in /home/regionstextfile; do tabix /sequences/human_variation/snps/genotypes.vcf.gz $i | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt; done
The idea is for each line in regionstextfile (which contains genome coordinates) run a program called tabix
in the vcf.bz
file, then with the output run vcftools
with the specified options, then put all the outputs into the genomesregions.txt
file.
Solución
That must be so:
for i in `</home/regionstextfile`
do
tabix /sequences/human_variation/snps/genotypes.vcf.gz $i | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt
done
When you use a variable (e.g. assign value to it or export it, or do anything but with the variable itself) you write its name without $
; when you use a value of a variable you write $
.
EDIT:
When region names contains spaces but each region is in a separate line, you need 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
Otros consejos
The same thing without cat :
while read i
do
tabix /sequences/human_variation/snps/genotypes.vcf.gz "$i" | vcftools --window-pi 10000 >> /home/Testgenomesdata/genomesregions.txt
done < /home/regionstextfile
Remark <file.txt
could not work unless 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"