在多个输入文件上运行shell程序
在多个输入文件上运行shell程序
如何设置一个命令行程序来运行文件夹中的所有输入文件?\n假设我的输入文件的命名方式如下,并且在_
和.txt
之间的部分是不同的:\n
IsomiR_377G.txt, IsomiR_377R.txt, IsomiR_379G.txt, ....
\n我的程序名为bowtie
,有两个选项input
和output
\nbowtie -i IsomiR_377G.txt -o IsomiR_377G.sam \n考虑到以下内容:\n
for f in IsomiR_*.txt do bowtie -i "$f" -o "Output${f#IsomiR}" done
\n我在awk函数中遇到了类似的问题:\n
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 `>'
问题的出现原因是需要在多个输入文件上运行相应的shell程序,而不是手动逐个运行命令。解决方法是使用一个循环来处理多个输入文件,并根据文件名生成相应的输出文件名。
假设有以下三个输入文件:
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,并将其用于生成输出文件名。