如何设置命令行程序来运行文件夹中的所有输入文件?
假设我的输入文件的名称如下所示,并且_
和.txt
之间的部分不同:
IsomiR_377G.txt,
IsomiR_377R.txt,
IsomiR_379G.txt,
....
我的任何程序都被命名为bowtie
,并有两个选项input
和output
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 `>'
答案 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。