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代码出现的问题似乎完全无关-我建议您删除它,并将重点放在使原始问题更清晰上。