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

如何用CDO从RegCM逐小时NetCDF输出提取昼夜数据集

使用CDO拆分RegCM逐小时地表温度数据为白昼/夜间数据集

核心逻辑

你的数据是UTC逐小时输出,需先转换为IST(+5.5小时),再筛选对应时段:

  • 白昼:IST 6:30-18:30 → 对应UTC时间01:00-13:00(每个UTC日)
  • 夜间:IST 18:30至次日5:30 → 对应UTC时间13:00-次日01:00(每个UTC日)

下面提供两种实操方法,按需选择:


方法一:基于时间偏移后筛选(更直观,推荐新手)

  1. 将UTC时间轴转换为IST
    用shifttime命令给所有时间戳加5.5小时,生成IST时间的中间文件:

    cdo shifttime,+5.5hours your_input_file.nc ist_shifted.nc
    
  2. 提取白昼数据
    IST白昼时段是6:30-18:30,对应偏移后时间的小时值(含小数)在6.5到18.5之间。用expr命令生成掩码筛选目标时段,再提取变量:

    # 生成带掩码的临时文件
    cdo expr,"day_mask = (hour(time)+0.5 >=6.5 && hour(time)+0.5 <=18.5) ? 1 : 0; t2m_day = t2m*day_mask" ist_shifted.nc temp_day.nc
    # 提取白昼时段的地表温度变量,保存为最终文件
    cdo selvar,t2m_day temp_day.nc data_day.nc
    # 删除临时文件
    rm temp_day.nc
    
  3. 提取夜间数据
    同理,筛选IST夜间时段(小时值<6.5 或 >18.5):

    cdo expr,"night_mask = (hour(time)+0.5 <6.5 || hour(time)+0.5 >18.5) ? 1 : 0; t2m_night = t2m*night_mask" ist_shifted.nc temp_night.nc
    cdo selvar,t2m_night temp_night.nc data_night.nc
    rm temp_night.nc
    

方法二:直接按时间索引筛选(匹配你提到的步长规则)

你提到首日白昼对应时间步1-13,夜间对应13-24,后续每天以此类推。我们可以用bash生成索引列表,再用selindex提取:

  1. 提取白昼数据
    生成每个UTC日的前13个时间步索引(1-13、25-37...1153-1165),并提取:

    # 自动生成白昼索引列表
    day_indices=$(seq 0 48 | awk '{for(i=1;i<=13;i++) print $1*24+i}' | paste -sd ",")
    # 提取对应索引的数据
    cdo selindex,$day_indices your_input_file.nc data_day.nc
    
  2. 提取夜间数据
    生成每个UTC日的13-24时间步索引(13-24、37-48...1165-1176),并提取:

    night_indices=$(seq 0 48 | awk '{for(i=13;i<=24;i++) print $1*24+i}' | paste -sd ",")
    cdo selindex,$night_indices your_input_file.nc data_night.nc
    

注意事项

  • 替换命令中的your_input_file.nc为你的实际输入文件名
  • 如果地表温度变量名不是t2m,请替换为你数据中的对应变量名
  • 方法一的中间文件ist_shifted.nc可在操作完成后删除

内容的提问来源于stack exchange,提问作者Ankan Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 04:17:04