【问题标题】:For loop: process files in different folders UNIXFor 循环:处理不同文件夹中的文件 UNIX
【发布时间】:2019-01-16 04:36:27
【问题描述】:

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

所以,我的当前目录中有数百个文件夹,名称从 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 脚本中创建的循环(这里我只使用一个简单的检查“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 行)。

谁能建议以最方便的方式处理所有文件的方法?

非常感谢,非常抱歉,我只是学习。

【问题讨论】:

  • 你可能想用 seq 一天:for i in $(seq 1000 1500); do echo $i; done

标签: file loops terminal directory fastq


【解决方案1】:

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

#!/bin/sh

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

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

【讨论】:

  • 嗨!非常感谢@Poshi!这行得通!你是对的,还有大量的事情要做。所以,有趣的事情。它运行“head”命令,但是当我在 head 命令之后使用下一个命令时,它说它找不到文件 - “head: ./folder1000/*.fastq: No such file or directory stat: No such file or目录”
  • 我很好奇,也许整个策略不正确,有更好的组织方式......因为那样我必须在每个文件夹中导入所有其他支持文件才能真正制作代码运行
  • 我不确定实际发生了什么。对我来说,该文件似乎受到限制访问或smth。它显示对齐读取的数量,然后说它找不到它。错误消息之一也是:“警告:无法打开读取文件“./folder1000/*.fastq”进行读取;正在跳过...”
  • No such fileCould not open file for reading 完全不同。它们是不同的问题。我建议你参加一些关于 Linux 基础、命令行和文件系统的入门课程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多