当前位置: 首页 > 知识库问答 >
问题:

如何在使用NCO串联每日TRMM netCDF文件时添加时间维度?

裴永年
2023-03-14

我从 https://disc.gsfc.nasa.gov/datasets 下载了几天的每日TRMM 3B42数据。文件名的格式为 3B42_Daily.yyyymmdd.7.nc4.nc4,但文件不包含任何时间维度。因此,当我使用 ncecat 连接各种文件时,结果文件中缺少日期信息。我想知道如何在组合数据集中添加时间信息。

时间戳似乎是全局属性的一部分。以下是来自 ncdump 的相关部分:

$ ncdump -h ~/Downloads/3B42_Daily.19980730.7.nc4.nc4 
netcdf \3B42_Daily.19980730.7.nc4 {
dimensions:
    lon = 201 ;
    lat = 201 ;
variables:
    float lon(lon) ;
...trimmed...
// global attributes:
        :BeginDate = "1998-07-30" ;
        :BeginTime = "01:30:00.000Z" ;
        :EndDate = "1998-07-31" ;
        :EndTime = "01:29:59.999Z" ;
...trimmed...

当我尝试使用ncecat3B42_Daily.199808??.7.nc4.nc4 /tmp/daily.nc4它给出了

$ ncdump -h /tmp/daily.nc
netcdf daily {
dimensions:
    record = UNLIMITED ; // (5 currently)
    lon = 201 ;
    lat = 201 ;
variables:
    float lon(lon) ;
...trimmed...
// global attributes:
        :BeginDate = "1998-08-01" ;
        :BeginTime = "01:30:00.000Z" ;
        :EndDate = "1998-08-02" ;
        :EndTime = "01:29:59.999Z" ;
...trimmed...

保留第一个文件的全局属性中的时间信息,这不是很有用。

当我试图在python中使用xarray时,我面临着同样的问题——再次,我无法找到在连接数据时如何使用全局属性中包含的时间信息。

我能想到两个可能的解决方案,但我不知道如何实现它们。

  1. 首先使用一些命令“手动”向每个文件添加时间戳,然后使用ncecat
  2. 以某种方式ncecat可以读取全局属性,并在连接时将其转换为维度和变量

从http://nco.sourceforge.net/nco.html的留档,我不知道如何实现这两种方式中的任何一种。或者有第三种更好的方法来实现这一点(添加相关时间信息的串联)?

共有1个答案

姬振
2023-03-14

由于数据文件不遵循 CF 约定,因此在使用 ncecat 连接文件后,您可能必须手动创建时间坐标。如果时间是规则的,则只需要几个命令,例如,

ncecat -u time in*.nc out.nc
ncap2 -O -s 'time[time]={0.0,1.0,2.0,3.0,4.0}' out.nc out.nc
ncatted -a units,time,o,c,"days since 1998-08-01" out.nc
    

或者将ncap2的数组工具用于通用算术数组。

 类似资料:
  • 目前,我的Spring-boot应用程序日志到一个名为:的文件,这是按预期工作,但是我希望日志文件在其末尾有一个,并在每次运行时创建一个新文件。 我尝试在<code>logback测试中实现这一点。xml文件如下所示,但它只是给出了文件名:myLog。没有时间戳的日志。 我该如何解决这个问题? 日志回测.xml:

  • 问题内容: 在我的表我有,列。 示例:和 如何将此列添加到我的列中,这样我就可以 我尝试了这个: 但它不起作用。 谢谢你,史蒂夫 问题答案: 据我了解,您想将前两位数字添加为小时,将后两位数字添加为分钟-但您并未在通话中执行此操作- 您要将两个部分都添加为-请尝试以下操作: 在这里,我使用了两个嵌套-内部添加小时,外部添加分钟到添加小时的结果上。 另外:在SQL Server中是 基于1的 ,例如

  • 问题内容: 好吧,我是linux新手,我在使用简单的bash脚本时遇到了问题。 我有一个程序可以在运行时添加到日志文件中。随着时间的流逝,日志文件变得越来越大。我想创建一个启动脚本,该脚本将在每次运行之前重命名并移动日志文件,从而为程序的每次运行有效地创建单独的日志文件。到目前为止,这是我得到的: 糊盒 运行时,我看到以下内容: 当我CD到logs目录并运行dir时,我看到以下内容: 这是怎么回事

  • 我正在使用PhpStorm,对于函数,我想在评论部分添加< code>@since 1.0.0。像这样: PhpStorm文档中没有说明如何实现这一点。 < li >有没有人使用过PhpStorm,并让< code>@since在做自动注释时显示出来? < li >这可以自动化吗? < li >我应该在PhpStorm的什么地方指定一个版本号来跟踪它?

  • 问题内容: 我有以下bash代码,该代码逐行循环通过文本文件.. im试图为每行添加工作前缀’prefix’,但是却出现此错误: 这是bash脚本.. 我在这里做错了什么? 更新:从头开始将所有行都转储到终端的一行中,可能相关吗? 问题答案: 单行awk命令也可以做到这一点:

  • 问题内容: 我正在尝试在bash脚本的文本文件中间添加一行文本。具体来说,我正在尝试将名称服务器添加到我的/etc/resolv.conf文件中。就目前而言,resolv.conf看起来像这样: 我的目标是在所有其他名称服务器行的上方,但在其上方的任何文本下方。最后,我希望我的resolve.conf文件看起来像这样: 通过bash脚本怎么可能?sed或awk可以执行此操作吗?还是创造性地尝试重新