暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【数值模型系列】link_grib.csh脚本解读

微思研 2022-11-06
1150

1 概述

在WPS中,ungrib.exe解析气象数据前会先链接GRIB气象数据(当然,不链接也行,拷贝过来也可以运行,但是非常浪费存储资源,因此使用软链接)为GRIBFILE.xxx,链接气象数据的脚本为link_grib.csh,以下对该脚本进行解读,以加深对该过程的理解。

2 代码解读

link_grib.csh的代码内容为(#注释部分为解读):

    #!/bin/csh -f            # csh脚本标志


    set alpha = ( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) # 用于链接文件的命名(GRIBFILE.xxx)
    set i1 = 1 # 第一个x在alpha的索引
    set i2 = 1 # 第二个x在alpha的索引
    set i3 = 1 # 第三个x在alpha的索引


    # ${#argv}表示获取传入的参数个数,${2}表示第二个参数
    if ( ( ${#argv} == 1 ) || ( ( ${#argv} == 2 ) && ( ${2} == "." ) ) ) then


    rm -f GRIBFILE.??? >& dev/null # 清除已有的GRIBFILE.xxx


    foreach f ( ${1}* ) # 对传入的第一个参数(为文件夹路径)下的所有文件进行遍历

    ln -sf ${f} GRIBFILE.$alpha[$i3]$alpha[$i2]$alpha[$i1] # 逐一链接,-f表示如存在同名链接则删除再创建,$alpha[$i3]表示获取alpha的索引为i3的字母
    @ i1 ++ # i1自增

    if ( $i1 > 26 ) then
    set i1 = 1 # 如果第一个x已经存在从A到Z共26个字母了,第二个x开始从1自增
    @ i2 ++
    if ( $i2 > 26 ) then
    set i2 = 1 # 如果第二个x已经存在从A到Z共26个字母了,第三个x开始从1自增
    @ i3 ++
    if ( $i3 > 26 ) then # 如果第三个x已存在了从A到Z了,表示需要链接的气象文件数目超过该脚本能链接的最大数目了,这时候一般可以分段模拟。
    echo "RAN OUT OF GRIB FILE SUFFIXES!"
    endif
    endif
    endif

    end
    # 入参多于1个且第二个不为'.'时的情况
    else if ( ${#argv} > 1 ) then


    rm -f GRIBFILE.??? >& dev/null # 删除已存在的链接


    foreach f ( $* ) # $*表示所有参数($1 $2 …$n的形式)

    if ( $f != "." ) then # 如果没循环到软链接的目标目录(当前目录),则依次链接
    ln -sf ${f} GRIBFILE.$alpha[$i3]$alpha[$i2]$alpha[$i1]
    @ i1 ++

    if ( $i1 > 26 ) then
    set i1 = 1 # 如果第一个x已经存在从A到Z共26个字母了,第二个x开始从1自增
    @ i2 ++
    if ( $i2 > 26 ) then
    set i2 = 1 # 如果第二个x已经存在从A到Z共26个字母了,第三个x开始从1自增
    @ i3 ++
    if ( $i3 > 26 ) then # 如果第三个x已存在了从A到Z了,表示需要链接的气象文件数目超过该脚本能链接的最大数目了,这时候一般可以分段模拟。
    echo "RAN OUT OF GRIB FILE SUFFIXES!"
    endif
    endif
    endif
    endif

    end
    else if ( ${#argv} == 0 ) then # 如果未传入参数,则在屏幕上给出用法提示
    echo " "
    echo " "
    echo " Please provide some GRIB data to link"
    echo " usage: $0 path_to_grib_data/grib_data_root"
    echo " "
    echo " "
    endif


    3 用法总结

    根据上面对源码的分析,可以知道最多能链接26*26*26=17576个文件(夹),一般都是足够了的。主要有两种链接方法。

    3.1 批量链接

    输入两个参数,第一个参数为要连接的气象数据的文件夹,第二个参数为链接目的地(当前位置,即'.')。例:

      # 假如需要连接的气象数据均在metdata文件夹下,则可使用如下命令
      ./link_grib.csh /metdata/ .

      3.2 文件单个列出后再链接

      输入多于两个参数,第一个至倒数第二个参数为要连接的气象数据的文件,最后一个参数为链接目的地(当前位置,即'.')。例:

        # 假如需要连接的气象数据均在metdata文件夹下,分别为fileA和fileB,则可使用如下命令
        ./link_grib.csh /metdata/fileA /metdata/fileB .


        博客地址:https://blog.csdn.net/weixin_44237659


        文章转载自微思研,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论