0

我已经编写了一个 ncks 代码来从 Hycom 数据库中提取数据,但是,由于服务器问题,我一次只能下载一个时间步。我需要一个循环,允许我下载一个月内的单个时间步长数据。

ncks -d time,2015-12-01T00:00:00Z -d depth,0.00,1000.00,1 -v water_temp,salinity,water_u,water_v,surf_el -d lon,161.45,171.28 -d lat,-4.75,3.43 'http://tds.hycom.org/thredds/dodsC/GLBv0.08/expt_53.X/data/2015' test.nc

我要下载的 4D 变量:water_temp、salinity、water_u、water_v(它们的维度是时间、纬度、经度、深度)

我要下载的 3D 变量:surf_el(维度是时间、纬度和经度)

对于 4D 变量,我希望深度在 0 到 1000m 之间。该代码仅适用于单个时间,我想涵盖 2015/12/01 和 2015/12/31 之间的时间段。整个 2015 年 12 月。

这里有一些 Python 工作代码:

import netCDF4
from netCDF4 import Dataset
dec = Dataset('http://tds.hycom.org/thredds/dodsC/GLBv0.08/expt_53.X/data/2015')
print(dec.variables.keys())  #odict_keys(['depth', 'lat', 'lon', 'time', 'tau', 'water_u', 'water_u_bottom', 'water_v', 'water_v_bottom', 'water_temp', 'water_temp_bottom', 'salinity', 'salinity_bottom', 'surf_el'])

long = dec.variables['lon']
lati = dec.variables['lat']
time = dec.variables['time']

for d in dec.dimensions.items():
    print(d)

#('depth', <class 'netCDF4._netCDF4.Dimension'>: name = 'depth', size = 40)
#('lat', <class 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 3251)
#('lon', <class 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 4500)
#('time', <class 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 2861)
4

1 回答 1

1

NCO 手册在此处提供了在时间维度上循环的示例:

for idx in {1..12}; do # Bash Shell (version 3.0+) 
  idx=`printf "%02d" ${idx}` # Zero-pad to preserve order
  ncks -F -d time,${idx},,12 t_anm_8501_8912.nc foo.${idx}
  ncra foo.${idx} t_anm_8589_${idx}.nc
done

${idx}如果您用上面的变量替换日期 hyperslab 中的 2 位数月份,类似的东西应该对您有用。

于 2021-05-26T21:42:11.157 回答