nco ежедневно вырезает файл netcdf с 10 утра до 10 утра каждый день с дублированными записями в 10 утра

#netcdf #netcdf4 #cdo-climate #nco #ncks

Вопрос:

Я очень новичок в nco, и я хочу разделить свой файл .nc (с 1996010110 по 2019123110) как ежедневный файл с 10 утра до 10 вечера. В этом случае каждый разделенный файл содержит YYYY-MM-DD:10:00 to YYYY-MM-(DD 1):10:00 . Обратите внимание, что последний час дня DD повторяется в начале следующего дня. То есть данные YYYY-MM-DD:10:00 дважды встречаются в file_YYYY_MM_DD.nc качестве начальных данных, а также конечных данных file_YYYY_MM_(DD-1).nc . Спасибо!

Комментарии:

1. Вопрос в том виде, в котором он написан, не является самосогласованным, в первой части говорится, что вы хотите сократить время с 10 утра до 10 вечера (т. Е. 12 или 13 шагов при условии, что данные поступают ежечасно, вы не говорите), но затем вы говорите, что хотите работать с 10 утра до 10 утра, повторяя шаг 10 утра в каждом файле. Пожалуйста, не могли бы вы уточнить, каково разрешение по времени и сколько шагов вы хотите в выводе?

2. Привет, я думаю, что я достаточно последователен, просто ожидайте, будет ли это закрытый интервал или открытый интервал. Пожалуйста, посмотрите комментарий под вашим ответом. Под «повторением шага 10 утра в каждом файле» я подразумевал обложки файлов [10 утра, 11 утра,…, 23:00, …, 10 утра на следующий день]. Таким образом, вы можете видеть, что на файлы приходится 25 часов, потому что 10 часов утра в один день включены в два файла (файл за этот день, а также файл за последний день). Я достаточно ясно выразился?

3. но вы говорите в своем названии 10 вечера!

4. Я отредактировал название, чтобы оно соответствовало заданному вопросу, надеюсь, все в порядке, как написано

Ответ №1:

Существует команда CDO, которая позволяет выбрать поддиапазон часов:

 cdo selhour,10/22 in.nc out.nc 
 

что бы ответить на первую часть вопроса, но из моего комментария вы увидите, что вопрос нуждается в дальнейшем разъяснении.

Комментарии:

1. Привет, Адриан, спасибо за твой ответ! Вторая часть означает, что в двух соседних файлах дублируется один час. Например, первый-1996-01-01-10:00 до 1996-01-02-10:00, что означает, что индекс времени охватывает 25 часов ([0,1,…, 24], начиная с 1996-01-01-00:00). Затем второй файл документирует следующий день с 1996-01-02-10:00 по 1997-01-03-10:00, который также охватывает 25 часов ([0,1,…, 24], начиная с 1996-01-02-10:00). Надеюсь, мое объяснение поможет! Еще раз спасибо!

Ответ №2:

Способ сделать это в NCO состоит в том, чтобы обернуть цикл во времени, используя форму подцикла гиперслэббера, чтобы устранить дублирующие метки времени, а затем выполнить цикл в течение нескольких дней, чтобы создать каждый файл, подобный этому документированному примеру здесь. Для ввода, где первой желаемой записью является индекс 10, последний желаемый индекс неограничен, количество записей в повторяющейся серии (т. Е. Шаг между группами) равно 25, а количество последовательных желаемых записей (желаемое подмножество группы) равно 24, первая команда хотела бы, чтобы это:

 ncrcat -d time,10,,25,24 in.nc out.nc
 

Затем out.nc будут содержаться тысячи дней данных без повторяющихся временных интервалов, и вы можете разделить этот файл на ежедневные файлы, как вам нравится, в том числе с ncrcat помощью цикла, что-то вроде

РЕДАКТИРОВАТЬ 20210924: Основываясь на пояснениях ниже, вы можете игнорировать вышеуказанную часть этого сообщения и перейти непосредственно к этому циклу, который был изменен для извлечения 25 шагов в день.

 for yr in {1996..2019}; do
  for mth in {1..12}; do
    for day in {1..${dpm[mth]}}; do # Days-per-month array exercise left for the reader :)
      yyyy=`printf "d" $yr`
      mm=`printf "d" $mth`
      dd=`printf "d" $day`
      ncrcat -d time,${yyyy}-${mm}-${dd}T10:00:00,${yyyy}-${mm}-${ddp1}T10:00:00 out.nc file_${yyyy}_${mm}_${dd}.nc
    done
  done
done
 

Комментарии:

1. Привет, Чарли, спасибо за твой ответ! Но мне нужны повторные данные…которые начинаются с 10:00 текущего дня (D) и заканчиваются в 10:00 следующего дня (D 1). Это означает, что 10:00 следующего дня также должно быть включено в файл D (конец файла D), а также в файл D 1 (начало файла D 1)…работает ли ваше объяснение в этом случае? Спасибо!

2. Итак, у вас есть 24 временных шага в день во входном файле, и вы хотите 25 временных шагов в день в выходном файле? Это было неясно в вашем первоначальном вопросе. В этом случае проигнорируйте первое использование ncrcat и измените время, запрошенное ncrcat в цикле, на то, что вы хотите. Я изменю его сейчас, чтобы получить 25 временных шагов в каждом выходном файле.