从脚本中的ftp链接下载基因组序列时的BASH变量解释

时间:2019-01-29 19:35:01

标签: bash variables ftp bioinformatics

我一直按照https://www.ncbi.nlm.nih.gov/genome/doc/ftpfaq/

的说明尝试使用ftp链接下载基因组序列数据。

我在tsv表的最后一列中有我的序列的ftp链接,我正在使用以下代码从for循环的每一行中提取它们:

$ ftp=`head -$line_number $input_table | awk -F '\t' '{print $NF}' | tail -1 | sed 's/\"//g'`

最后的sed命令是从输出中删除双引号,否则将wgetrsync解释为字符串的一部分(导致它们失败)。

要下载每个序列,我将上面链接中的行添加到循环中(下面是精确代码):

$ wget --recursive --no-host-directories --cut-dirs=6 "${ftp}" -P "new_directory/"

我还尝试使用https和rsync下载,并通过在sed 's/ftp/rsync/'变量的管道中添加sed 's/ftp/https/'ftp来建议更改链接:

$ rsync -rvth --copy-links --prune-empty-dirs "${ftp}" "new_directory/"
$ wget --recursive -e robots=off --reject "index.html" --no-host-directories --cut-dirs=6 "$ftp" -P "new_directory/"

在我的脚本中,这些命令未能找到正确的目录(请参见下面的错误)。

FTP:$ No such file ‘GCA_000048645.1_ASM4864v1\r’.

RSYNC:rsync: link_stat "/all/GCA/000/048/645/GCA_000048645.1_ASM4864v1\#015" (in genomes) failed: No such file or directory (2)

但是,当我在脚本之外尝试时,将每个链接(作为脚本中的$ echo $ftp行的输出)直接馈入上述命令即可,并且下载成功。输出还匹配原始表中的链接(下面的示例)。

 ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/000/048/665/GCA_000048665.1_ASM4866v1

我认为语法或BASH读取变量的方式一定有误,但我对BASH中的变量替换了解不足以解决此问题?谁能建议我可能是什么问题?

注意:我尝试将双引号和括号都添加到脚本中的所有其他变量(例如,上一行的line_number和输入文件变量)以及它们的不同组合,但无济于事。为了简单起见,我没有包括完整的脚本,但是我检查了其余的bug,问题似乎出在ftp变量的解释上,因此我尝试包括所有与之相关的代码。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要删除回车符。替换

sed 's/"//g'

使用

tr -d '"\r'