Bash脚本循环仅运行一次

Scu*_*ris 4 bash loops bioinformatics

我正在尝试解析输入文件(我的测试文件为4行),然后查询在线生物数据库。但是,返回第一个结果后,我的循环似乎停止了。

#!/bin/bash
if [ "$1" = "" ]; then
        echo "No input file to parse given. Give me a BLAST output file"
else
        file=$1
        #Extracts GI from each result and stores it on temp file.
        rm -rf /home/chris/TEMP/tempfile.txt
        awk -F '|' '{printf("%s\n",$2);}' "$file" >> /home/chris/TEMP/tempfile.txt
        #gets the species from each gi.
        input="/home/chris/TEMP/tempfile.txt"
        while read -r i
        do
                echo GI:"$i"
                /home/chris/EntrezDirect/edirect/esearch -db protein -query "$i" | /home/chris/EntrezDirect/edirect/efetch -format gpc | /home/chris/EntrezDirect/edirect/xtract -insd source o
rganism | cut -f2 
        done < "$input"
        rm -rf /home/chris/TEMP/tempfile.txt
fi
Run Code Online (Sandbox Code Playgroud)

例如,我唯一的输出是

GI:751637161

Pseudomonas stutzeri group
Run Code Online (Sandbox Code Playgroud)

而我应该有4个结果。任何帮助表示赞赏,并在此先感谢。

这是样本输入的格式:

TARA042SRF022_1 gi|751637161|ref|WP_041104882.1|    40.4    151 82  2   999 547 1   143 2.8e-21 110.9
TARA042SRF022_2 gi|1057355277|ref|WP_068715547.1|   62.7    263 96  1   915 133 80  342 7.1e-96 358.6
TARA042SRF022_3 gi|950462516|ref|WP_057369049.1|    38.3    47  29  0   184 44  152 198 5.1e+01 36.2
TARA042SRF022_4 gi|918428433|ref|WP_052479609.1|    37.5    48  29  1   525 668 192 238 6.1e+01 37.0
Run Code Online (Sandbox Code Playgroud)

che*_*ner 5

似乎read -r i在第二次调用时返回的退出状态为非零,表明没有更多数据要从输入文件中读取。这通常意味着while循环内的命令也会从标准输入中读取数据,并在read有机会之前消耗了文件的其余部分。

这里唯一的候选者是esearch,因为echo它不会从标准输入中读取,而其他命令都是从管道中的前一个命令读取。重定向的标准输入,esearch以便不会无意中消耗您的输入数据。

while read -r i
do
    echo GI:"$i"
    /home/chris/EntrezDirect/edirect/esearch -db protein -query "$i" < /dev/null |
      /home/chris/EntrezDirect/edirect/efetch -format gpc |
      /home/chris/EntrezDirect/edirect/xtract -insd source organism |
      cut -f2 
done < "$input"
Run Code Online (Sandbox Code Playgroud)