ncks 对多个小的 netcdf 文件追加缓慢
ncks append slow for multiple small netcdf files
我的模型为每个时间步长和每个变量生成一个 netcdf 文件,
named DDDDDDD.VVV.nc,其中 DDDDDDD 是日期,VVV 是变量名。
对于每个时间步,我使用 nco 附加对应于不同变量的文件,以便每个时间步获得一个文件。
#! /bin/bash
# looping on timesteps to merge all variables
# I use one variable 'O2o' to get the list of timesteps
for timesteps in *.O2o.nc;
do
timestep=$(echo $timesteps| cut -b -21)
echo $timestep
for var in $timestep*.nc;
do
ncks -Ah $var 'F1_'$timestep.nc
done
done
大约有432个输出变量,每个文件大约6,4K或1,1K(变量的维数不同)。
我发现这个过程非常慢(例如每个时间步长 15 秒),而文件非常小。知道我应该如何优化脚本吗?
速度慢可能是因为打开、移动数据、添加数据和关闭文件 432 次。要对此进行优化,请减少文件操作的数量,特别是附加(导致)的数量。尝试一次(成组)将所有数据写入一个 netCDF4 文件,然后将文件扁平化为 netCDF3。对于每个时间步,它将如下所示:
ncecat --gag in*.nc all_group.nc
ncks -3 -G : all_group.nc all_flat.nc
两个命令而不是 432。如果任何变量出现在多个输入文件中,您将收到一条错误消息,指出一个变量将在 all_flat.nc 中被多次定义。通过删除重复的输入来避免这种情况。
我的模型为每个时间步长和每个变量生成一个 netcdf 文件, named DDDDDDD.VVV.nc,其中 DDDDDDD 是日期,VVV 是变量名。
对于每个时间步,我使用 nco 附加对应于不同变量的文件,以便每个时间步获得一个文件。
#! /bin/bash
# looping on timesteps to merge all variables
# I use one variable 'O2o' to get the list of timesteps
for timesteps in *.O2o.nc;
do
timestep=$(echo $timesteps| cut -b -21)
echo $timestep
for var in $timestep*.nc;
do
ncks -Ah $var 'F1_'$timestep.nc
done
done
大约有432个输出变量,每个文件大约6,4K或1,1K(变量的维数不同)。
我发现这个过程非常慢(例如每个时间步长 15 秒),而文件非常小。知道我应该如何优化脚本吗?
速度慢可能是因为打开、移动数据、添加数据和关闭文件 432 次。要对此进行优化,请减少文件操作的数量,特别是附加(导致)的数量。尝试一次(成组)将所有数据写入一个 netCDF4 文件,然后将文件扁平化为 netCDF3。对于每个时间步,它将如下所示:
ncecat --gag in*.nc all_group.nc
ncks -3 -G : all_group.nc all_flat.nc
两个命令而不是 432。如果任何变量出现在多个输入文件中,您将收到一条错误消息,指出一个变量将在 all_flat.nc 中被多次定义。通过删除重复的输入来避免这种情况。