You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NCO切割netCDF为每日10点至次日10点文件(保留重复10点数据)

NCO按指定时间窗口拆分NetCDF文件实现方案

核心思路:利用NCO的ncks命令的维度筛选功能结合日期循环实现,ncks的时间范围筛选默认是闭区间,天然满足相邻文件10点时间步重叠的要求。

前置检查

  • 先确认NetCDF文件的时间变量配置,执行命令:
    ncdump -h your_input_file.nc | grep -i time
    确认时间变量名(通常为time)、时间单位符合CF标准(例如hours since 1900-01-01 00:00:00),NCO可直接识别日期字符串筛选。
  • 提前合并多源输入文件:如果你的数据分散在多个nc文件中,先执行ncrcat *.nc merged_input.nc合并为单文件再拆分。

实现脚本(Bash环境)

#!/bin/bash
# 配置参数
input_file="merged_input.nc" # 替换为你的输入文件路径
start_date="1996-01-01"
end_date="2019-12-30" # 最后一个窗口为2019-12-30 10点到2019-12-31 10点,所以结束日期设为30号

# 循环遍历所有日期
curr_date=$start_date
while [[ "$curr_date" < "$end_date" || "$curr_date" == "$end_date" ]]
do
    # 拆分当前日期的年、月、日
    year=${curr_date:0:4}
    month=${curr_date:5:2}
    day=${curr_date:8:2}
    # 计算下一天日期
    next_date=$(date -d "${curr_date} +1 day" +%Y-%m-%d)
    
    # 核心拆分命令:时间范围为闭区间,同时包含首尾两个10点的时间步,天然满足重叠要求
    ncks -d time,"${curr_date} 10:00:00","${next_date} 10:00:00" ${input_file} -o file_${year}_${month}_${day}.nc
    
    # 日期推进1天
    curr_date=$(date -d "${curr_date} +1 day" +%Y-%m-%d)
done

注意事项

  • 如果你的时间变量名不是time,请把命令中-d time,后的time替换为实际的时间变量名。
  • 如果NCO无法识别你的日期字符串,可将时间范围替换为数值索引:假设你的数据是逐小时时序,1996-01-01 10点对应索引为0,那么每个窗口取25个连续时间步即可,命令改为ncks -d time,${start_idx},$((start_idx+24)) ${input_file} -o file_${year}_${month}_${day}.nc,每次循环start_idx累加24。
  • 生成文件后可执行ncdump -h file_1996_01_01.nc | grep time检查时间范围是否符合要求。

内容的提问来源于stack exchange,提问作者Xu Shan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:09:03