【问题标题】:How to merge/ combine time variable in multiple netcdf如何在多个 netcdf 中合并/组合时间变量
【发布时间】:2020-06-26 02:39:46
【问题描述】:

我有很多具有相同纬度和经度维度的海面温度 NetCDF 文件,但时间变量不同。我想尝试通过组合时间变量将其组合成 1 个 NetCDF 文件,因为每个 netcdf 文件中的时间变量都是连续的

有没有更有效的方法?因为在 CDO(气候数据操作员)中我不能循环

以下是我使用的文件名示例

sstdas_19810101.nc
sstdas_19810102.nc
sstdas_19810103.nc
sstdas_19810201.nc
sstdas_19810202.nc
sstdas_19810203.nc
...
sstdas_20171203.nc

带有模式 sstdas_(year)(month)(dekad)

【问题讨论】:

  • 能否请您显示您尝试的 cdo 命令以及您遇到的错误?
  • cdo merge input_1.nc input_2.nc output.nc 这需要很多时间,因为我无法使用该代码进行循环
  • 您是否尝试使用通配符 cdo mergetime,例如stackoverflow.com/questions/26240747/…
  • 如果文件名不是连续的但时间变量是连续的,可以吗?还是必须是顺序的?
  • 我相信它们需要像您的原始示例一样按照正确的字母数字顺序排列。为什么不尝试一下,看看你会得到什么?

标签: r netcdf netcdf4 cdo-climate


【解决方案1】:

您可以在 CDO 中使用 mergetime 参数:

cdo mergetime sstdas_*.nc merged_file.nc

请注意,对于此操作,CDO 会同时打开所有文件,并且在某些系统上对同时打开文件的数量有限制,在这种情况下,CDO 会抛出错误。在这种情况下,您将需要循环,您可以使用 bash 循环对 CDO 执行此操作,我建议一次尝试一年,然后合并它们:

#!/bin/bash
for year in {1981..2007} ; do
  cdo mergetime sstdas_${year}??.nc sstdas_${year}.nc
done 
cdo mergetime sstdas_????.nc sstdas_wholeseries.nc

注意我使用单字母通配符“?”更加严格,避免将每日文件和每年文件与两次合并混合在一起。

【讨论】:

  • 我收到一个错误simultan.sh: line 1: syntax error near unexpected token ``$'do\r'''imultan.sh: line 1:`for year in {1982..2018} ; do
  • 您使用的是哪个外壳?我在顶部添加了一个 bash 命令,您可能需要将其添加为第一行。如果您喜欢使用另一个 shell,您也可以使用 seq 编写循环,如下所示: for year in seq 1981 2007 ;在 $(seq 1981 2007) 中做或一年; do v - 无论如何,您是否尝试过先在一个命令中简单地执行它而不诉诸循环?有效果吗?
  • 你的意思是现在可以在windows 10下安装的ubuntu shell进程?如果在 shell 窗口中输入“seq 10”会发生什么?
猜你喜欢
  • 2022-11-19
  • 2018-07-07
  • 2015-09-05
  • 2018-10-10
  • 2015-05-11
  • 2021-04-10
  • 2021-11-03
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多