从Linux Bash中Windows中形成的文本文件中读取内容



我正在尝试使用WGET和URL从数据库下载文件。例如

wget" http://www.rcsb.org/pdb/files/1bxs.pdb"

因此,URL的格式就是这样:http://www.rcsb.org/pdb/files/($ idnumber).pdb"

但是我有很多文件要下载;因此,我写了一个bash脚本,该脚本读取文本文件中的id_numbers,形成URL字符串和WGET下载。

!/bin/bash
while read line
do
url="http://www.rcsb.org/pdb/files/$line.pdb"
echo -e $url
wget $url
done < id_numbers.txt

但是,将URL字符串形成为

.pdb://www.rcsb.org/pdb/files/4H80

因此,.pdbhttp重新录制。我不知道为什么。有人有主意吗?我该如何格式化它,以便URL

"http://www.rcsb.org/pdb/files/($idnumber).pdb"

?非常感谢。

注意。这个问题被标记为"如何在bash中连接弦?"的重复。但是我实际上在要求其他东西。在问这个问题之前,我读了这个问题,事实证明我的问题是在Windows中准备TXT文件并非真正的字符串concetation。我编辑了问题标题。我希望现在更清楚。

听起来像您的id_numbers.txt文件具有DOS/Windows风格的线路结束(托架返回后返回,后面是lineFeed字符),而不是普通的Unix线路结尾(只有lineFeed)。结果是read认为线路以托架返回而结束,$line实际上在末端有一个托架返回,并且嵌入在URL中,引起了各种混乱。

有几种解决此问题的方法。当您使用时,您可以从变量中击败马车返回:

url="http://www.rcsb.org/pdb/files/${line%$'r'}.pdb"

,或者您可以通过告诉 read将马车返回计算为whitespace( read将从读取的内容中缩小和落后):

while IFS=$'r' read line

,或者您可以使用诸如dos2unix(或OS上的等效内容)之类的命令来转换ID_NUMBERS.TXT文件。

-e ECHO选项用于输出所需的内容而无需插入新行,您不需要它。

我还怀疑您的文件包含要畸形的ID,您创建了哪个操作系统?

无论如何,您可以这样简化脚本:

!/bin/bash
while read line
do
    wget "http://www.rcsb.org/pdb/files/$line.pdb"
done < id_numbers.txt

我能够通过生成类似的id_numbers.txt文件成功测试它:

for i in $(0 9) ; do echo "$i" >> id_numbers.txt ; done

尝试以下:

url="http://www.rcsb.org/pdb/files/"$line
$url=$url".pdb"

有关更多信息,请检查如何在bash中加入字符串变量?

相关内容

  • 没有找到相关文章

最新更新