For循环:处理UNIX中不同文件夹中的文件

时间:2019-01-15 20:14:21

标签: file loops terminal directory fastq

我试图寻找类似主题的问题的答案,但没有成功。也许我忽略了。任何帮助表示赞赏!

因此,我在当前目录中有数百个文件夹,名称从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行)。

有人可以建议以最方便的方式处理所有文件的方法吗?

非常感谢,很抱歉,我正在学习。

1 个答案:

答案 0 :(得分:1)

好吧,您正在使用变量$file遍历文件夹,但是没有在循环主体中使用此变量。只需使用它即可:

#!/bin/sh

for file in ./folder{1000..1005}
do
    head -10 $file/*.fastq
done

总体问题中还有其他问题,但这是解决问题的答案。让我们一一解决问题:-)