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

Linux服务器上如何将NetCDF时序数据按纬度分类转换为DGVM所需文本格式?

高效转换MIROC6气温NetCDF数据至DGVM格式的Shell方案

直接用CDO结合Shell循环可批量完成格点拆分、文件夹创建和数据导出,完全替代手动操作,以下是具体实现步骤:

准备工作

  • 确认CDO已安装(服务器通常可通过module load cdo加载,或自行编译安装)
  • 确认输入NetCDF文件的变量名(MIROC6气温变量一般为tas,可通过ncdump -h 文件名.nc查看)

批量转换脚本

创建名为convert_dgvm_input.sh的脚本,内容如下:

#!/bin/bash
# 配置参数,根据实际情况修改
INPUT_FILE="miroc6_tas_1851-1860.nc"
VAR_NAME="tas"

# 获取经纬度格点数量
NLAT=$(cdo nlat "$INPUT_FILE")
NLON=$(cdo nlon "$INPUT_FILE")

# 遍历所有格点
for ((grid_idx=0; grid_idx < NLAT*NLON; grid_idx++)); do
    # 计算1-based的纬度、经度索引
    lat_folder=$((grid_idx / NLON + 1))
    lon_file=$((grid_idx % NLON + 1))
    
    # 创建纬度文件夹(不存在则自动创建)
    mkdir -p "lat_${lat_folder}"
    
    # 计算该格点的实际经纬度值(适配0.5°分辨率)
    lon_val=$(echo "$lon_file * 0.5 - 180" | bc)
    lat_val=$(echo "$lat_folder * 0.5 - 90" | bc)
    
    # 提取该格点的逐月时间序列,保存为对应文本文件
    cdo output,"$VAR_NAME" -remapnn,lon=${lon_val}:lat=${lat_val} "$INPUT_FILE" > "lat_${lat_folder}/lon_${lon_file}.txt"
done

脚本运行说明

  1. 给脚本添加执行权限:chmod +x convert_dgvm_input.sh
  2. 运行脚本:./convert_dgvm_input.sh,数据量大时可后台运行:nohup ./convert_dgvm_input.sh &
  3. 脚本完成后,会生成360个lat_1至lat_360的文件夹,每个文件夹内包含720个lon_1至lon_720.txt文件,每个文件内为对应格点1851-1860年的逐月气温数据(每行一个月,按时间顺序循环)

替代方案(NCO实现)

如果更习惯用NCO,可将脚本内的CDO命令替换为NCO组合命令:

# 提取单个格点的NetCDF子集
ncks -v "$VAR_NAME" -d lat,$((lat_folder-1)) -d lon,$((lon_file-1)) "$INPUT_FILE" temp.nc
# 将子集转为文本文件(仅保留数据行)
ncdump -v "$VAR_NAME" temp.nc | grep -E '^[0-9]' | awk '{print $1}' > "lat_${lat_folder}/lon_${lon_file}.txt"
# 删除临时文件
rm temp.nc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:47:15