微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用csv在Bash中执行for循环并在互联网上下载文件

如何解决使用csv在Bash中执行for循环并在互联网上下载文件

因此,对于我的论文,我想从加拿大政府下载气候天气数据。他们为我提供了一个命令,允许我下载特定气象站的所有数据:

for year in `seq 1998 2008`;do for month in `seq 1 1`;do wget --content-disposition "https://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=1706&Year=${year}&Month=${month}&Day=14&timeframe=2&submit= Download+Data" ;done;done

但是,我想为此创建一个 forloop,以便它自动下载所有所需气象站的数据。我创建了一个包含所有必要 StationID 的 csv 文件,名为:stations.csv

到目前为止我有

while read line \
do \
echo ... \
done < stations.csv

但是,当我复制粘贴代码并将 1706(这是一个 stationID)更改为 $line 时,它​​不起作用。有人知道如何解决这个问题吗?

解决方法

假设 wget,可能:

wget -i stations.csv

while read line; do
  echo ${line}
  wget ${line}
done < stations.csv
,

对于面临同样问题的人。确保检查 .txt 文件设置。如果您使用的是 Windows,请使用 CRLF; mac 用户,使用 LF。

最终代码:

> tail +2 stations.txt | while IFS= read -r line || [ -n "$line" ]; do
> echo ${line}; for year in `seq 1998 2008`;do for month in `seq 1 1`;do
> wget --content-disposition
> "https://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=${line}&Year=${year}&Month=${month}&Day=14&timeframe=2&submit=
> Download+Data" ;done; done; sleep 2; done

文档名称: 站。 txt
文档标题: tail +2 -> 从第二行开始循环。
睡眠设置:这通过在循环之间等待来减少网站压力。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。