如何为文件中的每一行运行程序

时间:2019-02-04 13:41:09

标签: bash

我有一个文件,例如file.txt:

Specie1
Specie2
Specie3

我有一个程序可以在这3个物种上运行,它叫做bedtools getfasta

所以我的主意是:

cat file_species.txt |
while read line; do 
    bedtools getfasta -fi /path/${line}/${line}.fa -bed /path/${line}/Recover_fasta.bed -s -fo /path/${line}/Fasta_loci_seq.fa" ;
done

如果我做echo,我会得到:

bedtools getfasta -fi /path/Specie1/Specie1.fa -bed /path/Specie1/Recover_fasta.bed -s -fo /path/Specie1/Fasta_loci_seq.fa" ;
done
bedtools getfasta -fi /path/Specie2/Specie2.fa -bed /path/Specie1/Recover_fasta.bed -s -fo /path/Specie1/Fasta_loci_seq.fa" ;
done
bedtools getfasta -fi /path/Specie3/Specie3.fa -bed /path/Specie1/Recover_fasta.bed -s -fo /path/Specie1/Fasta_loci_seq.fa" ;
done

,如果我只是粘贴这些代码,它的工作原理如何,但是如何在"do"之后的第一个脚本中执行它,而不执行回显然后粘贴代码?

1 个答案:

答案 0 :(得分:0)

除去结尾的双引号和分号,然后将${line}替换为"$line"

cat file_species.txt |
while read line; do 
    bedtools getfasta -fi /path/"$line"/"$line".fa -bed /path/"$line"/Recover_fasta.bed -s -fo /path/"$line"/Fasta_loci_seq.fa
done