【发布时间】:2017-12-06 02:55:21
【问题描述】:
我想循环浏览 40 个 netCDF 文件。有 20 个带有变量 PRECC 的文件和 20 个带有变量 PRECL("modelmember001.PRECC.192001-200512.nc", "modelmember002.PRECC.192001-200512.nc", ... ,"modelmember020.PRECC.192001-200512.nc" 和 PRECL 的文件)。
我需要使用循环执行多个 cdo(气候数据运算符)命令(添加 PRECC 和 PRECL 文件,并将时间序列从 1920-2005 更改为 1955-2005)。
这是我使用的代码:
datadir="path_to_mydatat"
workdir="path_to_folder_for_newfiles"
members="{001 .. 020}"
for model in $members
do
echo 'working with model' ${model}
echo cdo -s add ${datadir}/modelmember${members}.PRECC.192001-200512.nc${datadir}/modelmember${members}.PRECL.192001-200512.nc ${workdir}/modelmember${members}PRECT.192001-200512.nc
# echo cdo -s selyear,1955/2005 ${workdir}/modelmember${members}.PRECT.192001-200512.nc ${workdir}/modelmember${members}.PRECT.195501-200512.nc
最终我需要 20 个名称为
的文件"modelmember001.PRECT.195501-200512.nc", "modelmember002.PRECT.195501-200512.nc", ... , "modelmember020.PRECT.195501-200512.nc"
这是我在运行代码时得到的结果(故意在 cdo 行前面加上“echo”):
$./cdo_add.sh
{001 .. 020}
working with model {001
cdo -s add /path_to_mydatat/modelmember{001 .. 020}.PRECC.192001-200512.nc /path_to_mydatat/modelmember{001 .. 020}.PRECL.192001-200512.nc /path_to_folder_for_newfiles/modelmember{001 .. 020}.PRECT.192001-200512.nc
working with model ..
cdo -s add /path_to_mydatat/modelmember{001 .. 020}.PRECC.192001-200512.nc /path_to_mydatat/modelmember{001 .. 020}.PRECL.192001-200512.nc /path_to_folder_for_newfiles/modelmember{001 .. 020}.PRECT.192001-200512.nc
working with model 020}
cdo -s add /path_to_mydatat/modelmember{001 .. 020}.PRECC.192001-200512.nc /path_to_mydatat/modelmember{001 .. 020}.PRECL.192001-200512.nc /path_to_folder_for_newfiles/modelmember{001 .. 020}.PRECT.192001-200512.nc
我的代码似乎没有遍历成员。我使用占位符“成员”的方式有问题,但我不知道如何解决它。 有人有建议吗? 干杯!
【问题讨论】:
-
for model in {001..020}-- 你可以使用变量。摆脱members="{001 .. 020}"(它会导致循环001然后..然后020) -
这里有一个类似的问题和解决方案:stackoverflow.com/q/169511/754550
标签: bash for-loop netcdf cdo-climate