【问题标题】:for loop with multiple commands [duplicate]带有多个命令的for循环[重复]
【发布时间】:2019-06-24 02:42:13
【问题描述】:

我在files.txt 中有多个文件名。我想在每个文件上运行三个脚本。我的建议正确吗?

文件.txt:

SRR13143.sra
SRR44234.sra
SRR23424.sra

我的尝试:

for FILE in "file.txt";
do
prefetch --max-size 300G $FILE
fastq-dump --gzip --split-3 $FILE
rm $FILE;
done

【问题讨论】:

  • 您不是从file.txt 读取文件名,您只是在逐字逐句地遍历名称file.txt
  • 顺便说一句,你应该总是引用变量,除非你有充分的理由不这样做。

标签: bash for-loop


【解决方案1】:

您想要一个 while 循环。

while IFS= read -r FILE; do
  prefetch --max-size 300G "$FILE"
  fastq-dump --gzip --split-3 "$FILE"
  rm "$FILE"
done < file.txt

【讨论】:

  • 也许作为点睛之笔,您的私有变量更喜欢小写。
  • 可能想要重定向循环中的命令&lt;/dev/null,如果我们不知道它们不消耗标准输入,只是出于谨慎。或者将 file.txt 放在备用 fd 上。
  • 如果其中一个脚本在输出中添加了扩展名,例如 SRR13143.sra.gz,我可以写:“$FILE”.gz 吗??
猜你喜欢
  • 2015-01-26
  • 2014-01-20
  • 2023-03-20
  • 2015-12-12
  • 2019-11-14
  • 2020-05-19
相关资源
最近更新 更多