cdo | 常用命令

整理一下平时经常会使用的cdo命令

如何来更改netcdf数据中的变量名呢?

假设我现在有一个sst月平均数据,希望将里面的变量名称sst修改为sst_new

netcdf oisst_monthly {
dimensions:lat = 180 ;lon = 360 ;time = UNLIMITED ; // (476 currently)nbnds = 2 ;
variables:float lat(lat) ;lat:units = "degrees_north" ;lat:long_name = "Latitude" ;lat:actual_range = 89.5f, -89.5f ;lat:standard_name = "latitude" ;lat:axis = "Y" ;lat:coordinate_defines = "center" ;float lon(lon) ;lon:units = "degrees_east" ;lon:long_name = "Longitude" ;lon:actual_range = 0.5f, 359.5f ;lon:standard_name = "longitude" ;lon:axis = "X" ;lon:coordinate_defines = "center" ;short sst(time, lat, lon) ;sst:long_name = "Monthly Mean of Sea Surface Temperature" ;sst:unpacked_valid_range = -5.f, 40.f ;sst:actual_range = -1.8f, 35.56862f ;sst:units = "degC" ;sst:add_offset = 0.f ;sst:scale_factor = 0.01f ;sst:missing_value = 32767s ;sst:precision = 2s ;sst:least_significant_digit = 2s ;sst:var_desc = "Sea Surface Temperature" ;sst:dataset = "NOAA Optimum Interpolation (OI) SST V2" ;sst:level_desc = "Surface" ;sst:statistic = "Mean" ;sst:parent_stat = "Weekly Mean" ;sst:standard_name = "sea_surface_temperature" ;sst:cell_methods = "time: mean (monthly from weekly values interpolated to daily)" ;sst:valid_range = -500s, 4000s ;

使用nco

ncrename -v sst,sst_new oisst_monthly.nc

修改结果,修改成功了

ncdump -h oisst_monthly.nc                                                                                                                                    
netcdf oisst_monthly {
dimensions:lat = 180 ;lon = 360 ;time = UNLIMITED ; // (476 currently)nbnds = 2 ;
variables:float lat(lat) ;lat:units = "degrees_north" ;lat:long_name = "Latitude" ;lat:actual_range = 89.5f, -89.5f ;lat:standard_name = "latitude" ;lat:axis = "Y" ;lat:coordinate_defines = "center" ;float lon(lon) ;lon:units = "degrees_east" ;lon:long_name = "Longitude" ;lon:actual_range = 0.5f, 359.5f ;lon:standard_name = "longitude" ;lon:axis = "X" ;lon:coordinate_defines = "center" ;short sst_new(time, lat, lon) ;sst_new:long_name = "Monthly Mean of Sea Surface Temperature" ;sst_new:unpacked_valid_range = -5.f, 40.f ;sst_new:actual_range = -1.8f, 35.56862f ;sst_new:units = "degC" ;sst_new:add_offset = 0.f ;sst_new:scale_factor = 0.01f ;sst_new:missing_value = 32767s ;sst_new:precision = 2s ;sst_new:least_significant_digit = 2s ;sst_new:var_desc = "Sea Surface Temperature" ;sst_new:dataset = "NOAA Optimum Interpolation (OI) SST V2" ;sst_new:level_desc = "Surface" ;sst_new:statistic = "Mean" ;sst_new:parent_stat = "Weekly Mean" ;sst_new:standard_name = "sea_surface_temperature" ;sst_new:cell_methods = "time: mean (monthly from weekly values interpolated to daily)" ;sst_new:valid_range = -500s, 4000s ;

当然,使用nco还可以修改属性的名称;下面是一个将 netcdf 文件中的 miss_value_FillValue 更改为零的示例:

ncatted -O -a missing_value, MITVAR,o,f,0 dasilva94_monthly_sst.nc
ncatted -O -a _FillValue,        MITVAR,o,f,0 dasilva94_monthly_sst.nc

其中,MITVAR是变量名,o 表示覆盖; f 表示浮点类型; 0是新值。

使用cdo

在刚刚修改为sst_new的基础上,使用cdo将其修改为sst_renew

cdo chname,sst_new,sst_renew oisst_monthly.nc oisst_monthly_renew.nc 

修改结果

ncdump -h oisst_monthly_renew.nc                                                                                                                                  ✔  anaconda3  95% hdd   16:49:39
netcdf oisst_monthly_renew {
dimensions:time = UNLIMITED ; // (476 currently)bnds = 2 ;lon = 360 ;lat = 180 ;
variables:double time(time) ;time:standard_name = "time" ;time:long_name = "Time" ;time:bounds = "time_bnds" ;time:units = "days since 1800-1-1 00:00:00" ;time:calendar = "standard" ;time:axis = "T" ;double time_bnds(time, bnds) ;float lon(lon) ;lon:standard_name = "longitude" ;lon:long_name = "Longitude" ;lon:units = "degrees_east" ;lon:axis = "X" ;float lat(lat) ;lat:standard_name = "latitude" ;lat:long_name = "Latitude" ;lat:units = "degrees_north" ;lat:axis = "Y" ;short sst_renew(time, lat, lon) ;sst_renew:standard_name = "sea_surface_temperature" ;sst_renew:long_name = "Monthly Mean of Sea Surface Temperature" ;sst_renew:units = "degC" ;sst_renew:add_offset = 0.f ;sst_renew:scale_factor = 0.01f ;sst_renew:_FillValue = 32767s ;sst_renew:missing_value = 32767s ;sst_renew:unpacked_valid_range = -5.f, 40.f ;sst_renew:actual_range = -1.8f, 35.56862f ;sst_renew:precision = 2s ;sst_renew:least_significant_digit = 2s ;sst_renew:var_desc = "Sea Surface Temperature" ;sst_renew:dataset = "NOAA Optimum Interpolation (OI) SST V2" ;sst_renew:level_desc = "Surface" ;sst_renew:statistic = "Mean" ;sst_renew:parent_stat = "Weekly Mean" ;sst_renew:cell_methods = "time: mean (monthly from weekly values interpolated to daily)" ;sst_renew:institution = "NCEP" ;
  • 经过测试,对于变量名称的修改,cdo的速度要明显快于nco(在我这个测试个例里面);当然,nco的修改结果还是在原本的数据里面,而cdo的修改结果保留在一个新的nc文件里面

如何使用wget从ftp或者网页直接下载数据呢?

  • 通过写一个shell脚本来实现

Index of /data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr

  • https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/

一个完整的数据为:https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/202404/oisst-avhrr-v02r01.20240401.nc

可以发现其链接的组成很有规则,下载一个文件时,我们可以直接wget https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/202404/oisst-avhrr-v02r01.20240401.nc

但是如果下载多个文件呢,就可以根据它有规则命名的属性来进行循环迭代下载

#!/bin/bash
# 循环遍历每个年份
for year in {2021..2021}; do# 循环遍历每个月份for month in {01..12}; do# 循环遍历每一天for day in {01..31}; do# 构建文件名filename="oisst-avhrr-v02r01.${year}${month}${day}.nc"# 构建下载链接url="https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/${year}${month}/${filename}"# 使用 wget 下载文件wget -o ./get -c -nH  -c  -r -A nc "$url"donedone
done

如何对于多个netcdf文件进行求和计算呢?

cdo enssum file1 file2 out.nc

或者

cdo enssum *_sst.nc out.nc

如何对于netcdf数据进行插值呢?

  • 守恒插值 (适用于降水数据)

cdo remapcon,r180x90  pr.nc  pr_regrid_2x2.nc 
  • 双线性插值
cdo remapbic,r144x73 in.nc out_interp.nc 

如何修改数据calendar的类型呢?

cdo setcalendar,standard ua_day_EC-Earth3_data.nc ua_day_EC-Earth3_data_stand.nc 

如何合并多个netcdf文件呢?

将多个nc数据按照时间维度进行合并,屡试不爽的方法。当然最好是保证要合并的数据都在同一个文件夹内。

  cdo mergetime GPM*.nc GPM-2004-05-07.nc 
  • 也可以通过python基于xr.concat()进行合并,当时还是cdo一行命令好使呀。虽然合并后的数据可能会偏大。

如何对于netcdf进行时间滤波呢?

  • 对于数据是月平均来说,如果要进行10个月的低通滤波,可以使用以下命令:
cdo lowpass,0.1 sst.anomaly.nc out.nc
  • 对于数据是日平均来说,如果要进行30-60天的带通滤波
cdo bandpass,365/60,365/30 sst.day.ano.nc out.nc

注意数据中不能存在nan值或者缺测值

如何处理数据中存在的nan值或者缺测值?

  • 将正常的数据转换为Nan值
cdo setmissval,nan input.nc output.nc
  • 将Nan值转化为其他值
cdo setmissval,0 input.nc output.nc

https://dwang.wordpress.com/

https://code.mpimet.mpg.de/boards/2/topics/4057

https://code.mpimet.mpg.de/boards/2/topics/11084

python & cdo :https://code.mpimet.mpg.de/projects/cdo/wiki/Cdo%7Brbpy%7D

cdo使用手册:http://www.idris.fr/media/ada/cdo.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PTA】7-4 朋友圈(C++ * 并查集思想)代码实现 一点反思

题目如下&#xff1a; AC代码如下&#xff08;参考PTA 7-2 朋友圈&#xff08;25 分&#xff09;_处理微信消息pta-CSDN博客&#xff09; #include<bits/stdc.h> using namespace std; #define sz 30005 typedef struct node{int rk, fa; }Node; Node tree[sz]; void In…

STL:copy简介

STL:copy STL算法&#xff1a;copy std::copy()函数使用 std::copy 函数在 中声明&#xff0c;属于变易算法(Modifying sequence operations)&#xff0c;主要用于实现序列数据的复制 template <class InputIterator, class OutputIterator>OutputIterator copy (InputI…

【SQL学习进阶】从入门到高级应用(九)

文章目录 子查询什么是子查询where后面使用子查询from后面使用子查询select后面使用子查询exists、not existsin和exists区别 union&union alllimit &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面…

【IB Protocal Serial--WQE】

IB Protocal Serial--WQE 1 Intro1.1 What1.2 IBA WQE 本系列文章介绍RDMA技术的具体实现–InfiniBand Protocal&#xff1b; Introduce the features, capalities,components, and elements of IBA. the principles of operation. 1 Intro 1.1 What 理解IB协议下面这三句话对…

CSS--学习

CSS 1简介 1.1定义 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09;。 1.2 特性 继承性 子级默认继承父级的文字控制属性。层叠性 相同的属性…

基于RFID技术的烟草在线监测系统在烟草仓库温湿度监测中的应用。

在现代工业生产中&#xff0c;精准高效的在线监测系统对于产品质量控制至关重要。尤其是在高价值且对环境敏感的产品制造过程中&#xff0c;如烟草加工&#xff0c;实时准确的数据采集与分析直接关系到最终产品的品质及安全标准达标程度。 烟草行业在我国属于传统轻工业之一&am…

Vite项目构建chrome extension,实现多入口

本项目使用Vite5 Vue3进行构建。 要使用vite工程构建浏览器插件&#xff0c;无非就是要实现popup页面和options页面。这就需要在项目中用到多入口打包&#xff08;生成多个html文件&#xff09;。 实现思路&#xff1a; 通过配置vite工程&#xff0c;使得项目打包后有两个h…

Spring中的Aware接口

Spring中的Aware接口 Aware接口介绍 Aware是Spring中的接口&#xff0c;它的作用是可以让Bean获取到运行环境的相关信息。比如获取到上下文、Bean在容器中的名称等。 Spring中提供了很多Aware接口的子类&#xff0c;具体如下&#xff1a; 常用接口的作用如下&#xff1a; …

【网络原理】HTTP|认识请求“报头“|Host|Content-Length|Content-Type|UA|Referer|Cookie

目录 认识请求"报头"(header) Host Content-Length Content-Type User-Agent(简称UA) Referer &#x1f4a1;Cookie&#xff08;最重要的一个header&#xff0c;开发&面试高频问题&#xff09; 1.Cookie是啥&#xff1f; 2.Cookie怎么存的&#xff1f; …

视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述

GA/T 1400协议主要应用于公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在城市的治安监控、交通管理、案件侦查等方面&#xff0c;GA/T 1400协议都发挥着重要作用。 以视频汇聚EasyCVR视频监控资源管理平台为例&#xff0c;该平台…

游戏逆向工具分析及解决方案

游戏逆向&#xff0c;是指通过各类工具对游戏进行反编译及源码分析&#xff0c;尝试分析游戏的实现逻辑的过程。这个过程需要使用解密、反编译、解压缩等技术&#xff0c;目的是还原或分析出游戏的代码逻辑及资源。 游戏逆向工具可以按照不同功能进行划分&#xff0c;如&#…

java微服在使用nacos注册中心时,ribbon负载均衡时给部分feign client使用静态serverList

我看很多贴子都是针对eureka环境下做静态ServerList配置&#xff0c;目前国内大部分都用Nacos&#xff0c;所以便研究了一下。 micore-service-x:ribbon:listOfServers: ip1:port,ip2:port2NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList m…

Linux上传文件

在finalshell中连接的Linux系统中&#xff0c;输入命令rz然后选择windows中的文件即可。

数据结构算法 数组的实现与练习(C语言实现,Java实现)

文章目录 数据结构数组(顺序表)特点使用Java实现更高级的数组C语言实现总结优点缺点 例题[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)[1. 两数之和](https://leetcode.cn/problems/two-sum/)[27. 移除元素](https://lee…

破解生产难题,这些中小汽配企业这样做

伴随着汽车新四化即智能化、网联化、电动化、共享化的趋势,国内汽车零部件行业在市场规模和发展速度上呈现高速增长。然而&#xff0c;在劳动力成本上升,原材料价格上涨,企业生产成本逐年增加的情境下&#xff0c;市场竞争越来越激烈&#xff0c;如何降本增效&#xff0c;还能构…

三十二篇:转化决策为行动:探索决策支持系统的深层价值

转化决策为行动&#xff1a;探索决策支持系统的深层价值 1. DSS的精髓&#xff1a;定义与核心功能 1.1 定义与作用 在现代商业的快速演变中&#xff0c;决策支持系统&#xff08;Decision Support Systems, DSS&#xff09;已成为企业获得竞争优势的重要工具。DSS是一种利用先…

【R语言基础】如何更新R版本

文章目录 概要流程细节具体步骤 概要 提示&#xff1a;由于软件包的更新&#xff0c;所以需要更新R至新版本 流程细节 查看当前R版本 R.version下载更新包&#xff1a;installr install.packages("installr")library(installr)跟着向导一步步执行安装 具体步骤 …

HTML5的标签(文本链接、图片路径详解)

目录 前言 一、文本链接 超链接表述 二、图片路径详解 绝对路径 相对路径 网络路径 前言 一、文本链接 超链接表述 HTML 使用标签<a>来设置超文本链接 超链接可以是一个字&#xff0c;一个词&#xff0c;或者一组词&#xff0c;也可以是一幅图像&#xff0c;…

本地电脑通过远程服务器进行ssh远程转发

☆ 问题描述 想要实现这样一个事情&#xff1a; 我想要提供一个ai服务&#xff0c;但是租计算服务器太贵了&#xff0c;我自己有配的台式机。那么用我的台式机作为服务器&#xff0c;租一个服务器做端口转发可行吗&#xff1f; ★ 解决方案 1. 修改服务器上的sshd_config文件…

如何格式化只读U盘?

U盘只读无法格式化&#xff0c;该怎么处理&#xff1f;别担心&#xff01;本文将向你提供一些实用方法&#xff0c;助你解决U盘写保护的难题。这些方法能有效帮助你解除U盘的只读状态&#xff0c;从而可以顺利进行格式化和其他操作。 不能格式化只读U盘 “我购买了一个U盘&…