如何将 netcdf 文件列表中的特定变量添加到另一个文件?

问题描述 投票:0回答:1

我已经意识到,我可以在终端中使用命令 ncks 将我需要的变量(温度)从一个 .nc 文件传输到另一个具有相同结构的文件,但它具有当前数据(uo,vo)而不是温度。我的问题是,如何创建一个循环,从每个温度 .nc 文件中获取温度变量并将其传输到同一日期的海流数据?

我已经尝试创建下面的脚本,尽管因为我是编程初学者,我很清楚这可能是非常错误的,但这就是我想要的逻辑

for filei in $(ls *TEMP-MFSe3r1-MED-b20200901_re-sv01.00.nc) ; do
        for filej in $(ls *RFVL-MFSe3r1-MED-b20200901_re-sv01.00.nc) ; do
                ncks -v thetao $filei $filej
        done
done

我编写的代码没有达到我想要的目的。虽然我希望代码获取每个 *TEMP netcdf 文件,从中获取温度变量并将其附加到等效的 RFVL 文件,但它所做的是运行循环太多次并尝试将该温度变量附加到所有*RFVL 文件。另外,我意识到我从未指定我的文件的名称,这是一个示例:

20130701_d-CMCC--RFVL-MFSe3r1-MED-b20200901_re-sv01.00_crop.nc
20130701_d-CMCC--TEMP-MFSe3r1-MED-b20200901_re-sv01.00_crop.nc

如果有人有更好的方法来建议,我基本上想要做的是从每个 *TEMP 文件,其中包括变量 thetao,潜在热量的变量,我想将该变量附加到等效变量(同一天) *RFVL 文件,以便创建包含温度和海流数据的 netcdf 文件列表(每种类型我有 60 个文件)

对于不完整的问题,我深表歉意,这是我第一次在堆栈溢出上发帖。

linux bash netcdf netcdf4 cdo-climate
1个回答
0
投票

假设:

  • 每个
    TEMP
    文件都有一个匹配的
    RVFL
    文件
  • 每个匹配的
    RFVL / TEMP
    文件对都具有相同的确切名称,除了 4 个字符的
    RFVL
    TEMP
  • 之外
  • OP 的示例
    ncks
    调用是有效的,并且执行 OP 想要的操作(当提供匹配的
    RVFL / TEMP
    文件时)
  • 每个
    TEMP
    文件都保证具有变量
    thetao
    的值;否则,OP 将需要提供有关如何确定是否以及如何处理
    TEMP
    文件是否 not 具有
    thetao
  • 值的更多详细信息
  • 不必担心 OP 运行此进程两次,从而将重复的
    thetao
    条目附加到
    RVFL
    文件中;否则OP将需要提供更多关于如何确定是否以及如何处理已包含
    RVFL
    条目
    thetao
  • 文件的更多详细信息

总体设计:

  • 获取
    TEMP
    文件名列表
  • 复制
    TEMP
    文件名并将
    TEMP
    替换为
    RFVL
  • 运行
    ncks
    命令

一个想法:

for src in *TEMP*.nc
do
    tgt="${src//TEMP/RFVL}"
    ncks -v thetao "${src}" "${tgt}"
done
© www.soinside.com 2019 - 2024. All rights reserved.