我一直按照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
命令是从输出中删除双引号,否则将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_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变量的解释上,因此我尝试包括所有与之相关的代码。感谢您的帮助!
答案 0 :(得分:1)
您需要删除回车符。替换
sed 's/"//g'
使用
tr -d '"\r'