微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

遍历两个文件列表的 shell 脚本中的 For 循环

如何解决遍历两个文件列表的 shell 脚本中的 For 循环

我想写一个 for 循环,它使用一个带有两个变量的函数,这两个变量都是文件我有一组 FASTA 文件和一组对应于每个 FASTA 文件的文本文件,我希望 for 循环并行迭代两个列表。这是函数对于一对文件的样子:

anvi-gen-contigs-database --contigs-fasta fastafile.fna --project-name ProjectName --output-db-path /path/to/file/fastafile.fna.db --external-gene-calls /path/to/file/textfile.txt --ignore-internal-stop-codons

我知道如何设置一个只接受一个变量的 for 循环,之前我使用过一个如下所示的 for 循环:

for f in *.fna; do 
    anvi-gen-contigs-database --contigs-fasta $f --project-name ProjectName --output-db-path /path/to/file/${f}_out.db; 
done

我一直在查看这个网站和其他网站,寻找一种方法修改前面的 for 循环,以便它将两个文件作为变量并成对地迭代它们,我发现了两种可能有效的方法,但是我发现的所有示例都没有涉及使用文件作为变量,因此我想在尝试运行它之前检查并确保 for 循环将执行我想要它执行的操作。这是第一种方式:

for f in *.fna and for e in *.txt; do 
    anvi-gen-contigs-database --contigs-fasta $f --project-name ProjectName --output-db-path /path/to/file/${f}_out.db --external-gene-calls /path/to/file/$e --ignore-internal-stop-codons; 
done

这是第二种方式:

for f,e in zip(*.fna,*.txt); do 
    anvi-gen-contigs-database --contigs-fasta $f --project-name ProjectName --output-db-path /path/to/file/${f}_out.db --external-gene-calls /path/to/file/$e --ignore-internal-stop-codons; 
done

有人可以确认这些方法中的至少一种在语法上是正确的,并且会按照我的意愿并行迭代两个文件列表,或者建议一种正确或更好的方法吗?谢谢!

解决方法

将两个文件名列表放在数组中,然后遍历数组索引。

fastas=(*.fna)
texts=(*.txt)

for i in ${#fastas[@]}; do
    f=${fastas[i]}
    e=${texts[i]}
    anvi-gen-contigs-database --contigs-fasta "$f" --project-name ProjectName --output-db-path "/path/to/file/${f}_out.db" --external-gene-calls "/path/to/file/$e" --ignore-internal-stop-codons
done

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?