我一直在尝试使用ftp链接下载基因组序列数据,如下所示:https://www.ncbi.nlm.nih.gov/genome/doc/ftpfaq/
我在tsv表的最后一列中有我的序列的ftp链接,我使用下面的代码从for循环中的每一行中提取这些链接:
$ ftp=`head -$line_number $input_table | awk -F 't' '{print $NF}' | tail -1 | sed 's/"//g'`
末尾的sed
命令是从输出中删除双引号,否则wget
和rsync
会将其解释为字符串的一部分(导致它们失败)。
为了下载每个序列,我将上面链接中的行添加到循环中(下面的确切代码):
$ 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_ASM4864v1r’.
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和输入文件变量)以及这些变量的不同组合中添加双引号和圆括号,但都无济于事。为了简单起见,我还没有包含完整的脚本,但我已经检查了其余部分的错误,问题似乎肯定是ftp变量的解释,所以我试图包含所有围绕它的代码。谢谢你的帮助!
您需要删除回车符。更换
sed 's/"//g'
带有
tr -d '"r'