我正在为基于 Fortran 的 DGVM 准备新的输入数据,但我在根据将使用的 DGVM 格式调整数据时遇到问题。我正在 Linux 服务器上执行此任务。
这是我将使用的气候数据: 下载气候数据 MIROC6 1851 年至 1860 年历史每月气温数据 (0.5 x 0.5)。
我需要按顺序执行这些步骤
我尝试通过多种方法转换 netcdf 数据:CDO、NCO 和 ncdump comamnd,我能够获得整个网格值的一种 .txt 格式。但根据需要的格式手动提取/分类单个网格值将花费大量时间。 我希望有其他有效的方法来转换这些数据,并且我希望有人愿意帮助我解决这个问题。
谢谢你。
我通过在循环中使用 CDO
outputtab
运算符找到了一个解决方案,该解决方案是用简单的 Linux bash 脚本编写的。每 20 个点进行一次转换过程,以避免对服务器 CPU 造成沉重负载(可以调整)。
我创建的代码如下:
#!/bin/bash
# Define input file and log file
input_file="/path/canesm5_r1i1p1f1_w5e5_ssp126_tas_global_daily_2015_2100_05gc.nc"
log_file="log.txt"
# Remove existing log file if it exists
rm -f $log_file
# Function to extract data for a specific latitude
extract_latitude() {
lat=$1
lon_index=1
max_jobs=20
job_count=0
# Loop through longitudes from -180 to 180 in 0.5 degree increments
for lon in $(seq -180 0.5 179.5); do
# Define the output file name based on the current latitude and longitude index
output_file="${lat}_${lon_index}.txt"
# Extract data for the grid point at the current latitude and longitude, save only values, and remove the header
(cdo -outputtab,value -remapnn,lon=${lon}_lat=${lat} $input_file | sed '1d' > $output_file) &>> $log_file &
# Increment the longitude index and job count
lon_index=$((lon_index + 1))
job_count=$((job_count + 1))
# Check if the max number of jobs has been reached
if [ $job_count -ge $max_jobs ]; then
wait # Wait for all background jobs to complete
job_count=0 # Reset job count
fi
done
# Wait for any remaining background processes to finish
wait
}
# Loop through latitudes from 90N to -90S in 0.5 degree increments
for lat in $(seq 90 -0.5 -90); do
echo "Extracting data for latitude $lat"
extract_latitude $lat
done
echo "Data extraction completed. Check $log_file for details."
谢谢你