Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Linux bash中从Windows中形成的文本文件中读取内容_String_Bash_String Concatenation - Fatal编程技术网

String 在Linux bash中从Windows中形成的文本文件中读取内容

String 在Linux bash中从Windows中形成的文本文件中读取内容,string,bash,string-concatenation,String,Bash,String Concatenation,我正在尝试使用wget和url从数据库下载文件。例如 wget“” 所以url的格式如下:($idnumber).pdb“ 但是我有很多文件要下载;所以我编写了一个bash脚本,从文本文件中读取id_编号,形成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 所以

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

wget“”

所以url的格式如下:($idnumber).pdb“

但是我有很多文件要下载;所以我编写了一个bash脚本,从文本文件中读取id_编号,形成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
所以,
.pdb
被回复为
http
。我不明白为什么。有人有想法吗? 我如何格式化它,使url是

"http://www.rcsb.org/pdb/files/($idnumber).pdb"
?? 非常感谢

注意。这个问题被标记为“如何在bash中连接字符串?”的重复项,但我实际上是在问其他问题。我在问这个问题之前阅读了这个问题,结果发现我的问题是在Windows中准备txt文件,而不是真正的字符串关联。我编辑了问题标题。我希望现在问题更清楚。

尝试t他的:

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

有关更多信息,请选中,
-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文件具有DOS/Windows样式的行尾(回车符后跟换行符),而不是普通的unix行尾(仅换行符)。结果是,
read
认为该行以回车结束,
$line
实际上在结尾处有一个回车,这会嵌入到url中,导致各种混乱

有几种方法可以解决此问题。在使用变量时,可以使用bash修剪该变量的回车:

url="http://www.rcsb.org/pdb/files/${line%$'\r'}.pdb"
或者您可以让
read
通过告诉它回车符算作空格来修剪它(
read
将从它读取的空格中修剪前导空格和尾随空格):


或者您也可以使用类似于dos2unix的命令(或操作系统上的任何等效命令)转换id_numbers.txt文件。

您可以发布几行
id_numbers.txt
吗?使用
cat-a
显示
id_numbers.txt
。此外,您几乎可以肯定读取
-r
标志,尽管在这种情况下它可能会或可能不会更改任何内容。或者id_nums.txt是在windows上创建的,并且有\r\n行结尾。Ah Gordon已经知道了这一点。
dos2unix文件
。祝大家好运。是的,我也怀疑这一点,我回答的第二句话。您好,您是对的。我在Windows的记事本++中形成了.txt文件。这导致了问题。我在那里有
echo
命令来查看我正在形成的url,以便我可以进行故障排除。感谢您的回复。在本cas中e您只需更改@Gordon所说的行分隔符(IFS)。如果您想要干净的东西,我的代码仍然有效(只需在while循环之前添加
IFS=$'\r'
).相当于,但更长,仍然无法解决回车问题。我实际上也尝试过同样的方法:)但切普纳是对的,并不能解决回车问题。这很有效!非常感谢。我认为这是因为回车的原因,但我还没有想出如何摆脱它。非常感谢!
for i in $(0 9) ; do echo "$i" >> id_numbers.txt ; done
url="http://www.rcsb.org/pdb/files/${line%$'\r'}.pdb"
while IFS=$'\r' read line