nco сокращает ежедневный файл netcdf с 10:00 до 22:00 каждый день
Я очень новичок в nco и хочу разделить свой файл .nc (с 1996010110 по 2019123110) как ежедневный файл с 10:00 до 22:00. В этом случае каждый разделенный файл содержит до
YYYY-MM-(DD+1):10:00
. Обратите внимание, что час окончания DD-дня повторяется в начале следующего дня. Это данные
YYYY-MM-DD:10:00
встречается дважды в
file_YYYY_MM_DD.nc
в качестве начальных данных, а также конечных данных
file_YYYY_MM_(DD-1).nc
. Спасибо!
2 ответа
Существует команда CDO, которая позволяет выбрать поддиапазон часов:
cdo selhour,10/22 in.nc out.nc
что ответит на первую часть вопроса, но из моего комментария вы увидите, что вопрос требует дальнейшего уточнения.
Способ сделать это в NCO состоит в том, чтобы обернуть цикл с течением времени вокруг использования формы субциклирования hyperslabber, чтобы исключить двойные временные метки, а затем зацикливаться на днях, чтобы создать каждый файл, подобный этому документированному примеру здесь. Для ввода, где первой желаемой записью является индекс 10, последний желаемый индекс не ограничен, количество записей в повторяющейся серии (т. Е. Шаг между группами) равно 25, а количество последовательных желаемых записей (желаемое подмножество group) равно 24, первая команда будет выглядеть так:
ncrcat -d time,10,,25,24 in.nc out.nc
потом
РЕДАКТИРОВАТЬ 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 "%04d" $yr`
mm=`printf "%02d" $mth`
dd=`printf "%02d" $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