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

Bash 在多个输入文件上运行shell程序,bash,shell,Bash,Shell,如何设置命令行程序来运行文件夹中的所有输入文件? 假设我的输入文件的名称如下所示,并且在\uu和.txt之间的部分有所不同: IsomiR_377G.txt, IsomiR_377R.txt, IsomiR_379G.txt, .... 我的任何程序都命名为bowtie,有两个选项input和output 蝴蝶结-i IsomiR_377G.txt-o IsomiR_377G.sam 我在想这样的事情: for f in IsomiR_*.txt do bowtie -i "$f"

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

IsomiR_377G.txt,
IsomiR_377R.txt,
IsomiR_379G.txt,
....
我的任何程序都命名为
bowtie
,有两个选项
input
output

蝴蝶结-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 `>'

假设您有以下三个输入文件:

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
后缀和第一个
\u
之前的所有内容,以获取输出文件名中使用的ID。

写问题时请小心。您混合使用了开关(
-q/-s
-i/-o
)并显示了一个与您列出的文件不同的命令示例。对于列表中的第一个文件,确切的命令是什么?看起来你对bash的字符串操作的理解是正确的;你到底被困在哪里?更新了。看起来对吗?可能只是输入错误。好的,你已经更改了开关,使它们匹配。文件名呢?您如何从
IsomiR_377G.txt
input1.txt
?您的awk代码出现的问题似乎完全无关-我建议您删除它,并将重点放在使原始问题更清晰上。