在多个输入文件上运行shell程序[重复]
Posted
技术标签:
【中文标题】在多个输入文件上运行shell程序[重复]【英文标题】:Run shell program on multiple input files [duplicate] 【发布时间】:2015-12-19 00:39:26 【问题描述】:如何设置命令行程序来运行文件夹中的所有输入文件?
假设我的输入文件的名称如下所示,并且在_
和.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 `>'
【问题讨论】:
在写你的问题时请小心。您使用了多种开关(-q/-s
与 -i/-o
)并显示了与您列出的文件不同的命令示例。列表中第一个文件的确切命令是什么?看来您在 bash 的字符串操作方面处于正确的位置;你到底卡在哪里了?
已更新。它看起来正确吗?也许只是打字错误..
好的,您已经更改了开关以使其匹配。文件名呢?你如何从IsomiR_377G.txt
到input1.txt
?
您在 awk 代码中遇到的问题似乎完全不相关 - 我建议您删除它并专注于使您的原始问题更清晰。
【参考方案1】:
假设你有这三个输入文件:
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。
【讨论】:
以上是关于在多个输入文件上运行shell程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章