如何在netcdf文件中将固定大小维度转换为无限制

Fav*_*avo 7 linux sed netcdf nco

我每天下载600MB netcdf-4文件,它们具有以下结构:

netcdf myfile {
dimensions:
        time_counter = 18 ;
        depth = 50 ;
        latitude = 361 ;
        longitude = 601 ;
variables:
        salinity
        temp, etc     

我正在寻找一种更好的方法将time_counter维度从固定大小(18)转换为无限维度.

我找到了一种使用netcdf命令和sed的方法.像这样:

ncdump myfile.nc | sed -e "s#^.time_counter = 18 ;#time_counter = UNLIMITED ; // (currently 18)#"  | ncgen -o myfileunlimited.nc

这对我来说对于小文件很有用,但是当转储600 MB的netcdf文件时,需要花费大量的内存和时间.

有人知道另一种方法来完成这个吗?

Fav*_*avo 13

你的答案非常有见地.我真的不想改进这个ncdump-sed-ncgen方法,我知道转储600MB的netcdf文件在文本文件中使用的空间几乎是5倍(CDL表示).然后修改一些标题文本并再次生成netcdf文件,感觉效率不高.

我阅读了最新的NCO命令文档,并找到了一个特定于ncks"--mk_rec_dmn"的选项.Ncks主要提取,写入或将数据附加到新的netcdf文件,然后这似乎是更好的方法,提取myfile.nc的所有数据并使用"--mk_rec_dmn"执行的新记录维度(无限维度)写入,然后替换旧文件.

ncks --mk_rec_dmn time_counter myfile.nc -o myfileunlimited.nc ; mv myfileunlimited.nc myfile.nc 

要进行相反的操作(记录尺寸为固定尺寸).

ncks --fix_rec_dmn time_counter myfile.nc -o myfilefixedsize.nc ; mv myfilefixedsize.nc myfile.nc

  • 您不需要 `-o myfileunlimited.nc ;mv myfileunlimited.nc myfile.nc`,只需说“-O -o myfile.nc”(-O 是可选的,用于覆盖原始文件而不询问)。 (2认同)