我如何 modify/subset 一个 wget 脚本来指定日期范围以仅将特定年份下载到不同的脚本中?
How do I modify/subset a wget script to specify a date range to only download certain years into different scripts?
我正在尝试从为每个模型提供 wget 脚本的 CMIP6 网站 (https://esgf-node.llnl.gov/search/cmip6/) 下载大量数据用于某些研究。
脚本从 1850 年到 2014 年每 6 小时或每月一次。日期格式如下所示(第一个脚本):185001010600-185101010000 或(对于 第二个脚本 )195001010600-195002010000、195002010600-195003010000
我的目标是把一个大剧本变成几个小剧本,每个剧本五年,从 1980 年到 2015 年
例如,我想将主脚本分成不同的脚本,间隔为 5 年(“19800101-19841231”,然后是“19850101-19901231”,等等),每个脚本都命名为 wget- 1980_1985.sh,wget-1985_1990.sh,分别
对于第二个脚本的示例日期范围,我需要:
197912010600 到 198601010000,之后每 5 年
我是初学者,如果可以请帮忙!
每个文件的部分 wget 脚本格式如下所示(它不会让我复制和粘贴整个内容,因为 links 太多 [请参见下文自行查找文件] ):
1.) #These are the embedded files to be downloaded download_files="$(cat <185001010600-185101010000.nc' 'http://esgf-data2.diasjp.net/thredds/fileServer/esg_dataroot/CMIP6/CMIP/MIROC/MIROC6/historical/r1i1p1f1/6hrPlevPt/hus/gn/v20191204/hus_6hrPlevPt_MIROC6_historical_r1i1p1f1_gn_185001010600-185101010000.nc' 'SHA256'
'fa9ac4149cc700876cb10c4e681173bcc0040ea03b9a439d1c66ef47b0253c5a'
'hus_6hrPlevPt_MIROC6_historical_r1i1p1f1_gn_185101010600-185201010000.nc' 'http://esgf-data2.diasjp.net/thredds/fileServer/esg_dataroot/CMIP6/CMIP/MIROC/MIROC6/historical/r1i1p1f1/6hrPlevPt/hus/gn/v20191204/hus_6hrPlevPt_MIROC6_historical_r1i1p1f1_gn_185101010600-185201010000.nc' 'SHA256'
'4ef4f99aa34aae6dfdafaa4aab206344125abe7808df675d688890825db53047'
2.) For the second script, the dates look like this: 'ps_6hrLev_MIROC6_historical_r1i1p1f1_gn_195001010600-195002010000.nc'
要运行它,你只需从网站下载脚本(见下文)
或从此 link 下载应该有效:
1.) https://esgf-node.llnl.gov/esg-search/wget/?distrib=false&dataset_id=CMIP6.CMIP.MIROC.MIROC6.historical.r1i1p1f1.6hrPlevPt.hus.gn.v20191204|esgf-data2.diasjp.net
2.) 可以在这里看到类似的脚本(日期不同,但我也需要这个):
https://esgf-node.llnl.gov/esg-search/wget/?distrib=false&dataset_id=CMIP6.CMIP.MIROC.MIROC6.historical.r1i1p1f1.6hrLev.ps.gn.v20191114|esgf-data2.diasjp.net
到运行终端中的脚本,这是我使用的命令
bash wget* -H
它会下载每个文件。
我可以 vi 脚本并删除每个文件(通过使用 "dd")我不需要,但这将非常耗时。
要查找此数据并从网站获取 wget 脚本,请转到:https://esgf-node.llnl.gov/search/cmip6/
和select页面左侧的变量如下:
来源编号:MIROC6,
实验 ID:历史,
变体标签:r1i1p1f1,
Table ID: 6hrPlevPt,
和变量:hus
it will look like this
*如果这些文件太大,您也可以 select Frequency:monthly 代替小得多的文件。我只想让您看到日期格式,因为每月就是月和年
然后点击搜索,它会为您提供一个模型供您下载。 it will look like this在底部,links,它会说 "wget script." 单击它,它将下载。
你可以
vi wget*
查看and/or编辑或
bash wget* -H
到run/download每个文件。
它可能会要求您登录,但我发现输入无意义的用户名和密码仍会开始下载。
请帮忙!这将是我生命中接下来的 6 个月,我真的不想 "dd" 所有这些我不需要的文件!
一个bash
for
循环可以生成相关的日期范围和输出文件名。
一个简单的sed
脚本可以删除按顺序出现的相关行。
例如:
#!/bin/bash
in=esgf_script
for y in $(seq 1979 5 2014); do
out="wget_{$y}-$((y+4)).sh"
sed '/_gn_/{ # if some kind of url:
/_gn_'$((y+5))'/,$ d; # delete if year >= y+5
/_gn_2015/,$ d; # delete if year >= 2015
/_gn_'$y'/,$ !d; # delete if year < y
}' <"$in" >"$out"
done
seq
命令从 1979 年到 2014 年每五年生成一次。
sed
脚本:
- 查找包含 url 的行:
/_gn_/
- 如果年份太大则删除
- 否则,如果年份足够大则不删除
此代码假定:
- 除 url 外,没有其他行包含第一个正则表达式 (
/_gn_/
)
- 网址按升序出现(例如,包含 1994 的网址不能出现在包含 1993 的网址之前)
我正在尝试从为每个模型提供 wget 脚本的 CMIP6 网站 (https://esgf-node.llnl.gov/search/cmip6/) 下载大量数据用于某些研究。
脚本从 1850 年到 2014 年每 6 小时或每月一次。日期格式如下所示(第一个脚本):185001010600-185101010000 或(对于 第二个脚本 )195001010600-195002010000、195002010600-195003010000
我的目标是把一个大剧本变成几个小剧本,每个剧本五年,从 1980 年到 2015 年
例如,我想将主脚本分成不同的脚本,间隔为 5 年(“19800101-19841231”,然后是“19850101-19901231”,等等),每个脚本都命名为 wget- 1980_1985.sh,wget-1985_1990.sh,分别
对于第二个脚本的示例日期范围,我需要: 197912010600 到 198601010000,之后每 5 年
我是初学者,如果可以请帮忙!
每个文件的部分 wget 脚本格式如下所示(它不会让我复制和粘贴整个内容,因为 links 太多 [请参见下文自行查找文件] ):
1.) #These are the embedded files to be downloaded download_files="$(cat <185001010600-185101010000.nc' 'http://esgf-data2.diasjp.net/thredds/fileServer/esg_dataroot/CMIP6/CMIP/MIROC/MIROC6/historical/r1i1p1f1/6hrPlevPt/hus/gn/v20191204/hus_6hrPlevPt_MIROC6_historical_r1i1p1f1_gn_185001010600-185101010000.nc' 'SHA256' 'fa9ac4149cc700876cb10c4e681173bcc0040ea03b9a439d1c66ef47b0253c5a' 'hus_6hrPlevPt_MIROC6_historical_r1i1p1f1_gn_185101010600-185201010000.nc' 'http://esgf-data2.diasjp.net/thredds/fileServer/esg_dataroot/CMIP6/CMIP/MIROC/MIROC6/historical/r1i1p1f1/6hrPlevPt/hus/gn/v20191204/hus_6hrPlevPt_MIROC6_historical_r1i1p1f1_gn_185101010600-185201010000.nc' 'SHA256' '4ef4f99aa34aae6dfdafaa4aab206344125abe7808df675d688890825db53047'
2.) For the second script, the dates look like this: 'ps_6hrLev_MIROC6_historical_r1i1p1f1_gn_195001010600-195002010000.nc'
要运行它,你只需从网站下载脚本(见下文)
或从此 link 下载应该有效: 1.) https://esgf-node.llnl.gov/esg-search/wget/?distrib=false&dataset_id=CMIP6.CMIP.MIROC.MIROC6.historical.r1i1p1f1.6hrPlevPt.hus.gn.v20191204|esgf-data2.diasjp.net
2.) 可以在这里看到类似的脚本(日期不同,但我也需要这个): https://esgf-node.llnl.gov/esg-search/wget/?distrib=false&dataset_id=CMIP6.CMIP.MIROC.MIROC6.historical.r1i1p1f1.6hrLev.ps.gn.v20191114|esgf-data2.diasjp.net
到运行终端中的脚本,这是我使用的命令
bash wget* -H
它会下载每个文件。
我可以 vi 脚本并删除每个文件(通过使用 "dd")我不需要,但这将非常耗时。
要查找此数据并从网站获取 wget 脚本,请转到:https://esgf-node.llnl.gov/search/cmip6/
和select页面左侧的变量如下: 来源编号:MIROC6, 实验 ID:历史, 变体标签:r1i1p1f1, Table ID: 6hrPlevPt, 和变量:hus it will look like this
*如果这些文件太大,您也可以 select Frequency:monthly 代替小得多的文件。我只想让您看到日期格式,因为每月就是月和年
然后点击搜索,它会为您提供一个模型供您下载。 it will look like this在底部,links,它会说 "wget script." 单击它,它将下载。
你可以
vi wget*
查看and/or编辑或
bash wget* -H
到run/download每个文件。 它可能会要求您登录,但我发现输入无意义的用户名和密码仍会开始下载。
请帮忙!这将是我生命中接下来的 6 个月,我真的不想 "dd" 所有这些我不需要的文件!
一个bash
for
循环可以生成相关的日期范围和输出文件名。
一个简单的sed
脚本可以删除按顺序出现的相关行。
例如:
#!/bin/bash
in=esgf_script
for y in $(seq 1979 5 2014); do
out="wget_{$y}-$((y+4)).sh"
sed '/_gn_/{ # if some kind of url:
/_gn_'$((y+5))'/,$ d; # delete if year >= y+5
/_gn_2015/,$ d; # delete if year >= 2015
/_gn_'$y'/,$ !d; # delete if year < y
}' <"$in" >"$out"
done
seq
命令从 1979 年到 2014 年每五年生成一次。
sed
脚本:
- 查找包含 url 的行:
/_gn_/
- 如果年份太大则删除
- 否则,如果年份足够大则不删除
此代码假定:
- 除 url 外,没有其他行包含第一个正则表达式 (
/_gn_/
) - 网址按升序出现(例如,包含 1994 的网址不能出现在包含 1993 的网址之前)