尊敬的高度赞赏的社区,
首先让我说谢谢你多年的宝贵演讲和学习。我总是通过调查得到我的问题的答案。不幸的是,这次我没有发现任何线索。
我正在编写,我想的是一个简单易用的脚本,可以从.csv文件中下载多个网站。
文件结构如下:
forename.surname@domain.com; http://www.url.com/?s=NUMBER&a=NUMBER&l=COUNTRY&c=NUMBER&h=NUMBER
其中NUMBER是数字,国家/地区是2位数国家/地区代码。例如,“uk”或“fr”。
网址alwas具有相同的开头http://www.URL.com/?s=
,后跟4个设置。
我想通过直接下载这几百个网站来满足。因为它们不包含任何特殊图像。
我的脚本如下所示:
#!/bin/bash
while read line
do
#echo $line
#curl -o download/test.htm $line
varA="$( echo $line|awk -F';' '{print $1}' )"
varB="$( echo $line|awk -F';' '{print $2}' )"
varB1="$( echo $varB|awk -F'&' '{print $2}' )"
varB2="$( echo $varB|awk -F'&' '{print $3}' )"
varB3="$( echo $varB|awk -F'&' '{print $4}' )"
varB4="$( echo $varB|awk -F'&' '{print $5}' )"
echo 'Downloading survey of:'
echo $varA
curl -o $varA.htm "http://www.url.com/?s=771223&"$varB1"&"$varB2"&"$varB3"&"$varB4
echo "--------------------------------------------------------------"
echo ""
done < Survey.csv
下载的网站始终包含 http 400错误。
我已经尝试了curl -o $varA.htm $varB
,它还返回了 http 400错误。
认为'&'
是罪魁祸首,你上面看到的剧本是我的最后一次尝试。
非常感谢提前! 安德烈
答案 0 :(得分:2)
与@chepner的评论相似,尝试类似:
while IFS=';?&' read varA varB0 varB1 varB2 varB3 varB4
do
echo 'Downloading survey of:'
echo "$varA"
curl -o "$varA.htm" "http://www.url.com/?s=771223&${varB1}&${varB2}&${varB3}&${varB4}"
done < Survey.csv
或在这种情况下,最后4个变量的使用不变:
while IFS=';?&' read varA varB0 rest
do
echo 'Downloading survey of:'
echo "$varA"
curl -o "$varA.htm" "http://www.url.com/?s=771223&$rest"
done < Survey.csv
答案 1 :(得分:1)
您可以在单个awk中使用多个awk:
s='forename.surname@domain.com;http://www.url.com/?s=NUMBER&a=NUMBER&l=COUNTRY&c=NUMBER&h=NUMBER'
awk -F '[;&?]' '{for (i=1; i<=NF; i++) print $i}' <<< "$s"
forename.surname@domain.com
http://www.url.com/
s=NUMBER
a=NUMBER
l=COUNTRY
c=NUMBER
h=NUMBER
您可以将结果存储在BASH数组中:
arr=( $(awk -F '[;&?]' '{for (i=1; i<=NF; i++) printf "%s ", $i}' <<< "$s") )