Как мне изменить / настроить скрипт wget, чтобы указать диапазон дат для загрузки только определенных лет в разные скрипты? - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь загрузить много данных для некоторых исследований с веб-сайта CMIP6 (https://esgf-node.llnl.gov/search/cmip6/), который предоставляет сценарии wget для каждой модели.

Сценарии предназначены для каждых 6 часов или месяцев с 1850 по 2014 г. Формат даты выглядит следующим образом ( 1-й сценарий ): 185001010600-185101010000 или (для 2-й сценарий ) 195001010600-195002010000, 195002010600-195003010000


Моя цель - превратить один гигантский сценарий в несколько меньших с пятью годы для 1980–2015 гг.

В качестве примера я хотел бы разбить основной сценарий на разные сценарии с интервалами в 5 лет («19800101-19841231», затем «19850101- 19901231 ", et c.) С каждым именем wget-1980_1985. sh, wget-1985_1990. sh соответственно

Для примера диапазона дат для 2-й сценарий, который мне понадобится: с 197912010600 по 198601010000, затем каждые 5 лет после этого


Я новичок, поэтому, пожалуйста, помогите, если можете! * Часть формата сценария wget для каждого файла выглядит следующим образом (это не позволит мне скопировать и вставить wh ole, так как ссылок слишком много [см. ниже, чтобы найти файл самостоятельно]):

1.) # Это встроенные файлы, которые нужно загрузить download_files = "$ (cat <185001010600-185101010000 .n c '' <a href="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" rel="nofollow noreferrer">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_ * '' SHA256 '4ef4f99aa34aae6dfdafaa4aab206344125abe7808df675d688890825db53047'

2.) Для второго сценария даты выглядят так: 'ps_6hrLev_MIROC6 * *

Чтобы запустить его, просто скачайте скрипт с сайта (см. Ниже)


или загрузка по этой ссылке должна работать: 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* 106 6 *


для запуска скрипта в терминале, эту команду я использую

bash wget * -H

и он загрузит каждый файл.

Я могу просмотреть сценарий и удалить каждый файл (используя «dd»), который мне не нужен, но это будет очень много времени.


Чтобы найти эти данные и получить скрипт wget с веб-сайта, go to: https://esgf-node.llnl.gov/search/cmip6/

и выберите переменные слева страницы следующим образом: Идентификатор источника: MIROC6, Идентификатор эксперимента: Исторический, Метка варианта: r1i1p1f1, Идентификатор таблицы: 6hrPlevPt и Переменная: hus это будет выглядеть так

* Если эти файлы слишком велики, вы также можете выбрать «Частота: ежемесячно» для файла намного меньшего размера. Я просто хочу, чтобы вы увидели формат даты, поскольку месячные - это всего лишь месяц и год

Затем нажмите «Поиск», и вы получите одну модель для загрузки. это будет выглядеть так Внизу со ссылками будет написано "скрипт wget". Нажмите на это, и он будет загружен.

Вы можете

vi wget *

для просмотра и / или редактирования или

bash wget * -H

для запуска / загрузки каждого файла. Он может попросить вас войти в систему, но я обнаружил, что набирая ерунду к имени пользователя, пароль все равно начинает загрузку.


Пожалуйста, помогите! Это будут следующие 6 месяцев моей жизни, и я действительно не хочу «добавлять» каждый файл, который мне не нужен для всех этих вещей!

1 Ответ

1 голос
/ 15 февраля 2020

A bash for l oop может генерировать соответствующие диапазоны дат и имя выходного файла.

Простой скрипт 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_/)
  • URL-адреса отображаются в порядке возрастания года (например, URL-адреса, содержащие 1994, не могут появляться до тех, которые содержат 1993)
...