文章目录
- CDO入门和使用实践
- 一、前言
-
- 简介
- 环境
- 二、正文
-
- 1.安装
- 2.使用
-
- 基础指令
- 查询指令
- 拆分指令
- 选择指令
- 转换指令
- 合并指令
- 数据插值
- 3.其它
CDO入门和使用实践
一、前言
简介
- CDO (Climate Data Operators) 是一个用于处理气候和 NWP 模型数据的大型工具集。支持 NetCDF 3/4、GRIB 1/2 包括SZIP(或AEC)和 JPEG 压缩、EXTRA、SERVICE 和 IEG 作为 IO 格式。除此之外,CDO 可用于分析与气候科学无关的任何类型的网格数据。
- CDO 的内存需求非常小,可以处理大于物理内存的文件。
- 应用场景
- 数据合并和拆分:时间、经纬度
- 数据简单运算:加减乘除、方差、均方差、和、最值、滑动均值、区域平均、区域方差、区域最值、滑动方差、滑动最值
- 数据转换:nc 转 grb、binary 转 nc、hdf 转 nc
- 数据统计运算:线性回归、滤波、EOF、水平插值、垂直插值
- 气候指数运算
环境
- Linux发行版:CentOS-7-x86_64-DVD-1804.iso
- CDO 版本:1.9.10
官网:https://code.mpimet.mpg.de/projects/cdo
依赖软件:https://code.mpimet.mpg.de/projects/cdo/wiki/Win32
wiki:https://code.mpimet.mpg.de/projects/cdo/wiki
指令说明文档:https://code.mpimet.mpg.de/projects/cdo/embedded/index.html
NetCDF Java(数据查看):https://www.unidata.ucar.edu/software/netcdf-java/
Panoply(数据绘图):https://www.giss.nasa.gov/tools/panoply/
二、正文
1.安装
- 查询依赖是否安装
# rpm -qa | grep zlib
# yum list installed | grep zlib
- 安装依赖包
#-- 更新 epel 第三方软件库
# yum -y install epel-release#-- 安装 jdk
# yum -y install java-1.8.0-openjdk*
# java -version#-- 安装依赖包
# yum -y install gcc gcc-gfortran curl zlib netcdf-devel udunits2-devel proj-devel openssl-devel openssh-server openssh-clients grib_api-devel gcc-c++
- 下载 CDO 压缩包
CDO 官网:https://code.mpimet.mpg.de/projects/cdo/files
- 编译安装
# tar -zxvf cdo-1.9.10.tar.gz
# cd cdo-1.9.10
# ./configure --prefix=/usr/local CFLAGS=-fPIC --with-netcdf=/usr/local --with-hdf5=/usr/local
# make
# make install
- 查看版本
# cdo -V
2.使用
基础指令
功能 | 指令 |
---|---|
查询版本号 | cdo -V |
帮助指令 | cdo -h |
查询指令
功能 | 指令 | 例子 |
---|---|---|
查询所有变量名 | cdo -showname {输入文件} | cdo -showname /opt/input.nc |
查询时间步长 | cdo -ntime {输入文件} | cdo -ntime cdo -showname /opt/input.nc |
拆分指令
官方文档:https://code.mpimet.mpg.de/projects/cdo/embedded/index.html#x1-1160002.2.9
功能 | 指令 | 例子 |
---|---|---|
根据时间步长进行拆分 | cdo splitsel,{时间步长} {输入文件} {输出文件-根据拆分数量自动编号} | cdo splitsel,1 /opt/input.nc /opt/output.nc |
选择指令
官方文档:https://code.mpimet.mpg.de/projects/cdo/embedded/index.html#x1-1490002.3
其它日期时间:seltimestep 、seltime 、selhour 、selday 、selmonth 、selyear 、selseason 、seldate 、selsmon
功能 | 指令 | 例子 |
---|---|---|
选择变量(可多个变量) | cdo -selname,{变量1},{变量2} {输入文件} {输出文件} | cdo -selname,time,u,v,depth /opt/input.nc /opt/output.nc |
选择步长(多个步长) | cdo -seltimestep,{时间步长1},{时间步长2} {输入文件} {输出文件} | cdo -seltimestep,1,3 /opt/input.nc /opt/output.nc |
选择步长(连续步长) | cdo -seltimestep,{时间步长1} / {时间步长2} {输入文件} {输出文件} | cdo -seltimestep,1/8 /opt/input.nc /opt/output.nc |
转换指令
官网文档:https://code.mpimet.mpg.de/projects/cdo/embedded/index.html#x1-7350002.13.2
功能 | 指令 | 例子 |
---|---|---|
正常转换 | cdo -f {转换格式} -copy {输入文件} {输出文件} | cdo -f grb -copy input.nc output.grb |
压缩转换 | cdo -f {转换格式}-z {压缩格式} {输入文件} {输出文件} | cdo -f grb -z szip input.nc output.grb |
合并指令
官网文档:https://code.mpimet.mpg.de/projects/cdo/embedded/index.html#x1-1110002.2.8
功能 | 指令 | 例子 |
---|---|---|
合并按日期和时间排序的数据集,所有输入文件都需要在不同的时间步上具有相同的结构和相同的变量 | cdo mergetime {输入文件1} {输入文件2} {输出文件} | cdo mergetime input1.nc input2.nc output.nc |
支持通配符 | cdo mergetime *.nc {输出文件} | cdo mergetime input*.nc output.nc |
合并具有不同字段的数据集(详情看官方说明) | cdo merge {输入文件1} {输入文件2} {输出文件} | cdo merge input1.nc input2.nc output.nc |
数据插值
官网文档:https://code.mpimet.mpg.de/projects/cdo/embedded/index.html#x1-6450002.12.2
功能 | 指令 | 例子 |
---|---|---|
正常转换 | cdo remapbic,r{经纬度网格} {输入文件} {输出文件} | cdo remapbic,r128x42 input.nc output.nc |
3.其它
1)NC数据查看软件:NetCDF Java
2)NC数据绘图软件 :Panoply