首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NCO:使用ncks从NetCDF文件中提取变量

NCO:使用ncks从NetCDF文件中提取变量
EN

Stack Overflow用户
提问于 2018-03-24 00:25:15
回答 2查看 13.1K关注 0票数 7

通过输入以下命令,我试图从多变量netcdf文件中提取一个变量:

代码语言:javascript
复制
ncks -v ta temp1.nc out.nc

然而,我看了一下out.nc头,所有的变量都还在。

Tem1.nc和out.nc的头都在下面:

代码语言:javascript
复制
--- temp1.nc header ---
dimensions:
        time = UNLIMITED ; // (124 currently)
        lon = 256 ;
        bnds = 2 ;
        lat = 128 ;
        lev = 40 ;
variables:
        double time(time) ;
                time:standard_name = "time" ;
                time:long_name = "time" ;
                time:units = "days since 1850-1-1" ;
                time:calendar = "365_day" ;
                time:axis = "T" ;
        double lon(lon) ;
                lon:standard_name = "longitude" ;
                lon:long_name = "longitude" ;
                lon:units = "degrees_east" ;
                lon:axis = "X" ;
                lon:bounds = "lon_bnds" ;
        double lon_bnds(lon, bnds) ;
        double lat(lat) ;
                lat:standard_name = "latitude" ;
                lat:long_name = "latitude" ;
                lat:units = "degrees_north" ;
                lat:axis = "Y" ;
                lat:bounds = "lat_bnds" ;
        double lat_bnds(lat, bnds) ;
        double p0 ;
                p0:long_name = "reference pressure" ;
                p0:units = "Pa" ;
        double lev(lev) ;
                lev:standard_name = "atmosphere_hybrid_sigma_pressure_coordinat
                lev:axis = "Z" ;
                lev:positive = "down" ;
                lev:long_name = "hybrid sigma pressure coordinate" ;
                lev:units = "1" ;
                lev:formula_terms = "a: a b: b p0: p0 ps: ps" ;
                lev:bounds = "lev_bnds" ;
                lev:formula = "p = a*p0 + b*ps" ;
        double lev_bnds(lev, bnds) ;
                lev_bnds:standard_name = "atmosphere_hybrid_sigma_pressure_coor
                lev_bnds:units = "1" ;
                lev_bnds:formula_terms = "a: a_bnds b: b_bnds p0: p0 ps: ps" ;
        double a(lev) ;
                a:long_name = "vertical coordinate formula term: ap(k)" ;
                a:units = "Pa" ;
        double b(lev) ;
                b:long_name = "vertical coordinate formula term: b(k)" ;
                b:units = "1" ;
        double a_bnds(lev, bnds) ;
                a_bnds:long_name = "vertical coordinate formula term: ap(k+1/2)
                a_bnds:units = "Pa" ;
        double b_bnds(lev, bnds) ;
                b_bnds:long_name = "vertical coordinate formula term: b(k+1/2)"
                b_bnds:units = "1" ;
        float ps(time, lat, lon) ;
                ps:standard_name = "surface_air_pressure" ;
                ps:long_name = "Surface Air Pressure" ;
                ps:units = "Pa" ;
                ps:comment = "surface pressure, not mean sea level pressure" ;
                ps:original_units = "hPa" ;
                ps:history = "2011-10-17T12:45:37Z altered by CMOR";
                ps:cell_measures = "area: areacella" ;
        float ta(time, lev, lat, lon) ;
                ta:standard_name = "air_temperature" ;
                ta:long_name = "Air Temperature" ;
                ta:units = "K" ;
                ta:_FillValue = 1.e+20f ;
                ta:missing_value = 1.e+20f ;
                ta:original_name = "T" ;
                ta:cell_measures = "area: areacella" ;
                ta:history = "2011-10-17T12:45:37Z altered by CMOR ;
// global attributes:

- out.nc头

代码语言:javascript
复制
dimensions:
        lev = 40 ;
        bnds = 2 ;
        lat = 128 ;
        lon = 256 ;
        time = UNLIMITED ; // (124 currently)
variables:
        double a(lev) ;
                a:long_name = "vertical coordinate formula term: ap(k)" ;
                a:units = "Pa" ;
        double a_bnds(lev, bnds) ;
                a_bnds:long_name = "vertical coordinate formula term: ap(k+1/2)" ;
                a_bnds:units = "Pa" ;
        double b(lev) ;
                b:long_name = "vertical coordinate formula term: b(k)" ;
                b:units = "1" ;
        double b_bnds(lev, bnds) ;
                b_bnds:long_name = "vertical coordinate formula term: b(k+1/2)" ;
                b_bnds:units = "1" ;
        double lat(lat) ;
                lat:standard_name = "latitude" ;
                lat:long_name = "latitude" ;
                lat:units = "degrees_north" ;
                lat:axis = "Y" ;
                lat:bounds = "lat_bnds" ;
        double lat_bnds(lat, bnds) ;
        double lev(lev) ;
                lev:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;
                lev:axis = "Z" ;
                lev:positive = "down" ;
                lev:long_name = "hybrid sigma pressure coordinate" ;
                lev:units = "1" ;
                lev:formula_terms = "a: a b: b p0: p0 ps: ps" ;
                lev:bounds = "lev_bnds" ;
                lev:formula = "p = a*p0 + b*ps" ;
        double lev_bnds(lev, bnds) ;
                lev_bnds:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;
                lev_bnds:units = "1" ;
                lev_bnds:formula_terms = "a: a_bnds b: b_bnds p0: p0 ps: ps" ;
        double lon(lon) ;
                lon:standard_name = "longitude" ;
                lon:long_name = "longitude" ;
                lon:units = "degrees_east" ;
                lon:axis = "X" ;
                lon:bounds = "lon_bnds" ;
        double lon_bnds(lon, bnds) ;
        double p0 ;
                p0:long_name = "reference pressure" ;
                p0:units = "Pa" ;
        float ps(time, lat, lon) ;
                ps:standard_name = "surface_air_pressure" ;
                ps:long_name = "Surface Air Pressure" ;
                ps:units = "Pa" ;
                ps:comment = "surface pressure, not mean sea level pressure" ;
                ps:original_units = "hPa" ;
                ps:history = "2011-10-17T12:45:37Z altered by CMOR" ;
                ps:cell_measures = "area: areacella" ;
        float ta(time, lev, lat, lon) ;
                ta:standard_name = "air_temperature" ;
                ta:long_name = "Air Temperature" ;
                ta:units = "K" ;
                ta:_FillValue = 1.e+20f ;
                ta:missing_value = 1.e+20f ;
                ta:original_name = "T" ;
                ta:cell_measures = "area: areacella" ;
                ta:history = "2011-10-17T12:45:37Z altered by CMOR" ;
        double time(time) ;
                time:standard_name = "time" ;
                time:long_name = "time" ;
                time:units = "days since 1850-1-1" ;
                time:calendar = "365_day" ;
                time:axis = "T" ;

// global attributes:

我以为out.nc上只有ta。我没有从ncks收到任何错误消息。

我在这里做错什么了?我很感谢你的帮助。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-24 21:15:28

发生此行为的原因是,默认情况下,NCO提取与请求的变量“关联”的所有变量。这样,用户就可以得到他们所需要的一切,而不必自己去寻找。换句话说,这是一个特性,而不是一个bug。要只提取显式请求的变量,请使用-C开关、文档化的这里

代码语言:javascript
复制
ncks -C -v ta temp1.nc out.nc

这些文档还展示了如何删除CF-约定相关的变量,同时使用各种较长的选项保留坐标。

票数 16
EN

Stack Overflow用户

发布于 2018-03-26 22:16:18

仅仅为了让另一个命令行替代NCO,您也可以使用CDO,

该命令是:

代码语言:javascript
复制
cdo selvar,variable_name input.nc output.nc 

如果你没有它,你可以用ubuntu,mint等安装它

代码语言:javascript
复制
sudo apt-get install cdo
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49459995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档