Linux 如何修改/子集wget脚本以指定日期范围,以便仅将特定年份下载到不同的脚本中?
我正试图从CMIP6网站()下载大量数据,以便进行一些研究,该网站为每个模型提供wget脚本 从1850年到2014年,脚本每6小时或每月一次。日期格式如下(第一个脚本):185001010600-185101010000或(第二个脚本)195001010600-1950020100000、19500201000-195003010000Linux 如何修改/子集wget脚本以指定日期范围,以便仅将特定年份下载到不同的脚本中?,linux,bash,date,download,wget,Linux,Bash,Date,Download,Wget,我正试图从CMIP6网站()下载大量数据,以便进行一些研究,该网站为每个模型提供wget脚本 从1850年到2014年,脚本每6小时或每月一次。日期格式如下(第一个脚本):185001010600-185101010000或(第二个脚本)195001010600-1950020100000、19500201000-195003010000 我的目标是在1980年至2015年期间,将一个巨著变成几个小剧本,每个剧本用五年时间 例如,我想将主脚本分为不同的脚本,间隔5年(“19800101-198
我的目标是在1980年至2015年期间,将一个巨著变成几个小剧本,每个剧本用五年时间 例如,我想将主脚本分为不同的脚本,间隔5年(“19800101-19841231”然后是“19850101-19901231”,等等),每个脚本分别命名为wget-1980_1985.sh、wget-1985_1990.sh 对于第二个脚本的示例日期范围,我需要: 197912010600到198601010000,然后每隔5年
我是初学者,如果可以的话,请帮助我 每个文件的wget脚本格式的一部分如下所示(它不允许我复制和粘贴整个内容,因为有太多的链接[请参见下文以自行查找文件]:
1。)#这些是要下载的嵌入式文件下载_files=“$(catA
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
!/bin/bash
in=esgf\u脚本
对于y,单位为美元(seq 1979 5 2014);是否
out=“wget_{$y}-$((y+4)).sh”
sed'/_gn./{#如果某种url:
/_如果年份>=y+5,则删除“$((y+5))”/,$d;#
/_gn_2015/,$d;#如果年份>=2015,则删除
/_gn'$y'/,$!d;#如果年份
seq
命令从1979年到2014年每五年生成一次
sed
脚本:
- 查找包含URL的行:
/\u gn./
- 如果年份太大,则删除
- 否则,如果年份足够大,则不会删除
- 除了URL之外,没有任何行包含第一个正则表达式(
)/\u gn./
- URL按年份升序显示(例如,包含1994的URL不能出现在包含1993的URL之前)
vi
jhnc中的dd
击键序列是正确的,我的意思是在vi中。为了简化我的问题:我有一个非常大的wget脚本多年,我需要将其子集到许多不同的scri中五年的pts每个“19800101-19851231”然后是“19850101-19901231”?其中一个1985s应该是1984或1986woops,很抱歉(最近没睡过觉!)你是对的,我是说“19800101-19841231”然后是“19850101-19901231”“这太棒了!非常感谢。这是非常接近我需要的!我将如何修改它来为我提供脚本:从198001010000到201401010000(所以是小时、天、月和年)?把这些年分解成:1980-1985年;1985-1990; 1990-1995; 1995-2000; 2000-2005; 2005-2010; 2010-2014年(不需要2015年)?这太棒了!非常感谢你!!!非常感谢