在多个输入文件上运行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,并且有两个选项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 `>'

【问题讨论】:

在写你的问题时请小心。您使用了多种开关(-q/-s-i/-o)并显示了与您列出的文件不同的命令示例。列表中第一个文件的确切命令是什么?看来您在 bash 的字符串操作方面处于正确的位置;你到底卡在哪里了? 已更新。它看起来正确吗?也许只是打字错误.. 好的,您已经更改了开关以使其匹配。文件名呢?你如何从IsomiR_377G.txtinput1.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程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用python在服务器上的同一个shell中运行多个命令[重复]

Linux之.bashrc 文件

创建和运行shell脚本程序

在与shell脚本相同的目录中创建文件夹[重复]

如何使用shell触发多个依赖程序?

编写一个linuxshell脚本,运行它提示输入你的姓名,当你输入完毕之后程序再次将你输入的结果显示在屏幕上。