我试图寻找类似主题的问题的答案,但没有成功。也许我忽略了。任何帮助表示赞赏!
因此,我在当前目录中有数百个文件夹,名称从folder1000到folder1500。在每个文件夹中,我都有一个.fastq文件,其名称不同(Lib1.fastq,Lib2.fastq等)。我想通过运行Shell脚本在一个循环命令中继续处理这些文件。
这是我在终端中运行的一个文件的shell脚本(script.sh)(它将创建输出并继续进行):
#!/bin/sh
bowtie --threads 4 -v 2 -m 10 -a genome Lib1.fastq --sam > Lib1.sam
samtools view -h -o Lib1.sam Lib1.bam
sort -k 3,3 -k 4,4n Lib1.sam > Lib1.sam.sorted
# ...etc
这是我尝试在shell脚本中执行的循环(在这里,我仅从一个简单的check“ head”命令开始,并且仅从5个头文件夹开始),该循环从当前目录运行,其中所有文件夹位于:
#!/bin/sh
for file in ./folder{1000..1005}
do
head -10 *.fastq
done
但是结果是:
head: *.fastq: No such file or directory
head: *.fastq: No such file or directory
head: *.fastq: No such file or directory
head: *.fastq: No such file or directory
head: *.fastq: No such file or directory
因此,即使是简单的检查命令也无法循环执行。不知何故我看不到该文件。但是,如果我直接在以下文件夹之一中运行命令:
MacBook-Air-Maxim:folder1000 maxim$ head -10 *.fastq
然后我得到正确的结果(显示文件的前10行)。
有人可以建议以最方便的方式处理所有文件的方法吗?
非常感谢,很抱歉,我正在学习。
答案 0 :(得分:1)
好吧,您正在使用变量$file
遍历文件夹,但是没有在循环主体中使用此变量。只需使用它即可:
#!/bin/sh
for file in ./folder{1000..1005}
do
head -10 $file/*.fastq
done
总体问题中还有其他问题,但这是解决问题的答案。让我们一一解决问题:-)