Read content from text file formed in Windows in Linux bash
我正在尝试使用wget和url从数据库下载文件。例如。
wget"http://www.rcsb.org/pdb/files/1bxs.pdb"
因此,URL的格式如下:http://www.rcsb.org/pdb/files/($idnumber.pdb"
但是我有很多文件要下载;所以我编写了一个bash脚本,它从文本文件中读取ID_号,形成URL字符串,并由wget下载。
1 2 3 4 5 6 7 8 | !/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字符串的格式为
1 | .pdb://www.rcsb.org/pdb/files/4H80 |
因此,用
1 | "http://www.rcsb.org/pdb/files/($idnumber).pdb" |
?谢谢。
注意事项。这个问题被标记为"如何在bash中连接字符串?"的副本。但我实际上是在要求别的东西。我在问这个问题之前读了这个问题,结果发现我的问题是在Windows中准备TXT文件,而不是真正的字符串概念。我编辑了问题标题。我希望现在更清楚了。
听起来您的id_numbers.txt文件有DOS/Windows样式的行尾(回车后跟换行符),而不是普通的Unix行尾(仅换行符)。其结果是,
有几种方法可以解决这个问题。使用变量时,可以让bash从变量中修剪回车:
1 2 | url="http://www.rcsb.org/pdb/files/${line%$' '}.pdb" |
或者你可以让
1 2 | while IFS=$' ' read line |
或者,您可以使用dos2unix之类的命令(或操作系统上的等效命令)来转换id_numbers.txt文件。
我还怀疑您的文件中包含的ID格式不正确,您是在哪个操作系统上创建的?
无论如何,您可以通过以下方式简化脚本:
1 2 3 4 5 6 | !/bin/bash while read line do wget"http://www.rcsb.org/pdb/files/$line.pdb" done < id_numbers.txt |
我能用这样生成的
1 | for i in $(0 9) ; do echo"$i">> id_numbers.txt ; done |
试试这个:
1 2 | url="http://www.rcsb.org/pdb/files/"$line $url=$url".pdb" |
有关详细信息,请检查如何在bash中连接字符串变量?