首页 > 解决方案 > bash while read 循环在第一行之后停止(根据 StackExchange 帖子进行更正后)

问题描述

我觉得这篇文章准确地描述了我的问题,我做了艾萨克建议的修改来解决它。那没有用,所以问题可能出在其他地方。

我编写了一个小脚本,旨在从文本文件中读取 ID,并使用 NCBI E-utils(命令行版本)执行数据库搜索和获取。它成功获取并输出第一个 fasta 序列,但随后退出。我不知道为什么。

while IFS='' read -r id || [ "$id" ]
do
    echo "Getting fasta for ${id}"
    esearch -db biosample -query "${id}" --api_key=$mykey | elink -target nuccore | efilter -source refseq | efetch -format fasta > "${id}.fasta"
done < arbank_all_samn_ids.txt

我也尝试像这样在我的文件中添加换行符:

[ -n "$(tail -c1 ids.txt)" ] && printf '\n' >> ids.txt

我的输入文件看起来像这样(大约 400 行):

SAMN04014842
SAMN04014843
SAMN04014844
SAMN04014845

STDOUT 现在看起来像这样(加上提取的单个文件:SAMN04014842.fasta)。有什么我可以添加来帮助解决问题的吗?)

[me@myserver]$ ./get_seqs.sh
Getting fasta for SAMN04014842
[me@myserver]$

无论如何,使用 E-Utils 获取非常挑剔,但此时我的问题是代码在文本文件的一行之后退出。这是我想要修复的部分(然后我将添加某种 try/except 块和休眠期来管理常量“500 Internal Server Error”)。

非常感谢您的帮助。我知道我一定是忽略了一些简单的事情,但是在尝试了一个小时不同的策略后我还没有找到它,所以我很感激一百万双眼睛。

标签: bashloopswhile-loop

解决方案


推荐阅读