Нужна помощь в добавлении двух файлов netcdf на основе выбора периода времени

У меня есть два файла netcdf: 1) BB_001.nc с 337 записями с переменной записи в качестве времени; 2) BB_002.nc, который является продолжением симуляции с 385 записями (переменная записи также является временем). Таким образом, эти два файла имеют одну запись перекрытия.

$ ncdump -h BB_001.nc
netcdf BB_WC {
dimensions:
nele = 278399 ;
node = 143546 ;
siglay = 18 ;
siglev = 19 ;
three = 3 ;
time = UNLIMITED ; // (337 currently)
DateStrLen = 26 ;
maxnode = 11 ;
maxelem = 9 ;
four = 4 ;
...

$ ncdump -h BB_002.nc
netcdf BB_0001 {
dimensions:
nele = 278399 ;
node = 143546 ;
siglay = 18 ;
siglev = 19 ;
three = 3 ;
time = UNLIMITED ; // (385 currently)
DateStrLen = 26 ;
maxnode = 11 ;
maxelem = 9 ;
four = 4 ;
...

Я хочу добавить их, но последняя запись BB_001.nc и первая запись BB_002.nc совпадают, и мне нужно удалить избыточную запись.

Я попробовал следующую команду:

ncks –A –d time,1,385 BB_002.nc BB_001.nc

Но это не сработало, и записи BB_001.nc остались прежними (337 вместо 337+384=721).

В качестве альтернативы я попытался:

ncrcat BB_001.nc BB_002.nc test.nc

Работает, но test.nc имеет 722 записей. Как я могу избавиться от лишней записи?

$ ncdump -h test.nc 
netcdf test {
dimensions:
nele = 278399 ;
node = 143546 ;
siglay = 18 ;
siglev = 19 ;
three = 3 ;
time = UNLIMITED ; // (722 currently)
DateStrLen = 26 ;
maxnode = 11 ;
maxelem = 9 ;
four = 4 ;

Любая помощь очень ценится.

Спасибо,

3 ответа

Решение

Обычно люди делают это в два этапа, как указано выше, например,

ncks -d time,1, BB_002.nc 2.nc
ncrcat BB_001.nc 2.nc out.nc

Люди, которые читают http://nco.sf.net/nco.html, знают о --record_append Опция, позволяющая сделать это за один шаг, т. е. быстрее. Упражнение осталось для читателя.

Прежде чем я отвечу, как это сделать в nco, я настоятельно рекомендую вам взять python и использовать библиотеку netCDF4, потому что, на мой взгляд, манипулирование файлами netCDF намного проще.

Сначала создайте новый файл netCDF и удалите последнюю запись:

ncks -d time,0,335 BB_001.nc BB_001_new.nc

Затем объедините BB_001_new.nc с BB_002.nc

ncrcat BB_001_new.nc BB_002.nc test.nc

Эквивалентное решение с использованием CDO:

cdo delete,timestep=1 BB_002.nc 2.nc
cdo mergetime BB_001.nc 2.nc out.nc

вы можете передать команду следующим образом:

cdo mergetime  BB_001.nc -delete,timestep=1 BB_002.nc out.nc
Другие вопросы по тегам