netcdf - 使用 NCO 连接全局层 netCDF 数据失败
问题描述
我正在使用TerraClimate从 1958 年到 2020 年的每月全球潜在蒸散量数据(每年 1 个 nc),并计划将所有数据连接到单个 nc 文件中。数据有一个变量pet
和三个维度ppt(time,lat,lon)
。
我设法使用cod mergetime TerraClimate_*.nc
并生成大约 100GB 的输出文件来组合所有数据。
为了在 Windows 机器中进行分析,我需要一个带有 order 的 netCDF 文件lat,lon,time
。我所做的如下:
- 使用命令将维度重新排序
time,lat,lon
为lat,lon,time
ncpdq
for fl in *.nc; do ncpdq -a lat,lon,time $fl ../pet2/$fl; done
- 循环文件夹中的所有文件,以使时间成为用于使用
ncks
命令连接文件的记录维度/变量
for fl in *.nc; do ncks -O --mk_rec_dmn time $fl $fl; done
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。下面是元数据
并使用 Panoply 可视化 ncrcat 结果
解决方案
您的命令似乎是正确的,但是我怀疑输入文件中的数据已打包。正如这里ncrcat
的文档中所解释的,在连接所有输入文件之前,输入数据应该被解包(例如,with )(除非它们都共享相同的and值)。如果这不能解决问题,那么 (1) 可能存在问题,并且 (2) 请发布示例输入文件中的元数据。ncpdq --unpack
scale_factor
add_offset
_FillValue
pet
推荐阅读
- python - 如何使用 python 列出文件及其字母数字值?
- javascript - 这个数据函数是Vue还是Node?
- html - 如何将悬停效果添加到引导导航菜单
- http - 哪些 ISP 支持在 http 标头中发送 MSISDN?
- emq - EMQ X 延迟消息
- git - 为什么 for-each-ref 和 show-ref 在裸存储库中的行为不同?
- c# - httpClient.GetAsync 调用抛出 System.ArgumentException:无法确定 JSON 对象类型
- excel - 有没有更快的方法来创建 txt 文件?
- unity3d - 统一:使父母的大小适合孩子的大小
- angular - 仅当没有查询字符串时才激活 AuthenticationGuard