首页 > 解决方案 > 使用 NCO 连接全局层 netCDF 数据失败

问题描述

我正在使用TerraClimate从 1958 年到 2020 年的每月全球潜在蒸散量数据(每年 1 个 nc),并计划将所有数据连接到单个 nc 文件中。数据有一个变量pet和三个维度ppt(time,lat,lon)

我设法使用cod mergetime TerraClimate_*.nc并生成大约 100GB 的输出文件来组合所有数据。

为了在 Windows 机器中进行分析,我需要一个带有 order 的 netCDF 文件lat,lon,time。我所做的如下:

  1. 使用命令将维度重新排序time,lat,lonlat,lon,timencpdq
for fl in *.nc; do ncpdq -a lat,lon,time $fl ../pet2/$fl; done
  1. 循环文件夹中的所有文件,以使时间成为用于使用ncks命令连接文件的记录维度/变量
for fl in *.nc; do ncks -O --mk_rec_dmn time $fl $fl; done
  1. ncrcat使用命令将文件夹中的所有 nc 文件连接成一个 nc 文件
ncrcat -h TerraClimate_*.nc -O TerraClimate_pet_1958_2020.nc

它有效,但结果不是我预期的,它生成 458KB 大小的文件,当我使用 Panoply 检查结果时,它提供了错误信息,所有值都为 -3276.7。见下图。

全方位

我检查了第 1 步和第 2 步中的文件,一切都是正确的。

我也尝试只连接 2 个文件,使用1958 年1959 年的数据(每个文件 103MB),但结果仍然不是我预期的。

ncrcat -h TerraClimate_pet_1958.nc TerraClimate_pet_1959.nc -O ../TerraClimate_pet_1958_1959.nc

我是否遗漏了代码上的某些内容或编写了错误的代码?任何建议如何解决这个问题?

更新 1(2021 年 10 月 22 日):

这是从上述链接下载的原始数据的元数据。 元数据

更新 2(2021 年 10 月 23 日):

根据查理的建议,我确实使用以下命令解压缩了上面第 2 点的所有数据。

for fl in *.nc4; do ncpdq --unpack $fl ../unpack/$fl; done

这是解包过程中的示例元数据。

元数据解包

以及使用 Panoply 可视化的数据。

打开包装

然后我使用解包过程(1958 年和 1959 年)中的 2 个数据进行了测试以再次连接

ncrcat -h TerraClimate_pet_1958.nc TerraClimate_pet_1959.nc -O ../TerraClimate_pet_1958_1959.nc

不幸的是结果保持不变,我得到的结果大小为 1MB。下面是元数据

ncrcat 元数据

并使用 Panoply 可视化 ncrcat 结果

ncrcat 全套

标签: netcdfnco

解决方案


您的命令似乎是正确的,但是我怀疑输入文件中的数据已打包。正如这里ncrcat的文档中所解释的,在连接所有输入文件之前,输入数据应该被解包(例如,with )(除非它们都共享相同的and值)。如果这不能解决问题,那么 (1) 可能存在问题,并且 (2) 请发布示例输入文件中的元数据。ncpdq --unpackscale_factoradd_offset_FillValuepet


推荐阅读