在多个输入文件上运行shell程序

时间:2015-09-22 06:38:48

标签: bash shell

如何设置命令行程序来运行文件夹中的所有输入文件? 假设我的输入文件的名称如下所示,并且_.txt之间的部分不同:

IsomiR_377G.txt,
IsomiR_377R.txt,
IsomiR_379G.txt,
....

我的任何程序都被命名为bowtie,并有两个选项inputoutput

bowtie -i IsomiR_377G.txt -o IsomiR_377G.sam

想到类似的东西:

for f in IsomiR_*.txt
do
    bowtie -i "$f"  -o "Output${f#IsomiR}" 
done

我的awk功能有类似的问题:

for f in IsomiR_*.txt 
do 
awk '{printf ">%s_%s\n %s\n",$1,$2,$1;}' "$f" > "Header${f#IsomiR}" 
done

-bash: syntax error near unexpected token `>'

1 个答案:

答案 0 :(得分:2)

假设您有这三个输入文件:

IsomiR_377G.txt
IsomiR_377R.txt
IsomiR_379G.txt

并希望运行相应的命令:

bowtie -i IsomiR_377G.txt -o output377G.sam
bowtie -i IsomiR_377R.txt -o output377R.sam
bowtie -i IsomiR_379G.txt -o output379G.sam

然后您可以使用类似于问题中的循环:

for f in IsomiR_*.txt; do 
    base_name=${f%.txt}
    id=${base_name#*_}
    bowtie -i "$f" -o "output${id}.sam"
done

这将删除.txt后缀以及导致第一个_的所有内容,以获取在输出文件名中使用的ID。