请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 45560|回复: 34

[经验总结] 分享ncl 源代码的自动搜索脚本(以bash编写)

[复制链接]

新浪微博达人勋

发表于 2018-2-2 13:24:14 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 packard 于 2018-4-8 14:29 编辑

对进阶ncl用户来说,有时候需要搜索ncl的一些函数是怎么实现的。特别是一些Built-in的函数,源代码的位置并不好找,里面也有一些包装又包装的情况。最近写了个Bash脚本,专门自动搜索这个源代码的。

假设你使用Linux,已经装好了ncl,设好了环境变量NCARG_ROOT。要做的有几步:
1. 下载ncl的源代码(不是precompiled 预编译的)。如: https://www.earthsystemgrid.org/ ... _ncarg-6.4.0.tar.gz
2. 解压(tar -zxvf ncl_ncarg-6.4.0.tar.gz)到一个目录(我这里解压在 ${NCARG_ROOT}/source-6.4.0/)
3. mkdir ~/bin; (如果文件夹还没存在)
4. 新建~/bin/gncl 文件,把以下代码复制进去,
5. 修改NCL_SOURCE变量为源代码的路径,保存退出。
6. chmod a+x ~/bin/gncl
7. 默认~/bin 应该在PATH里,如果不是,把它加进PATH里,方便以后调用。
8. `gncl 函数全名` 即可使用。

20180408更新:wrkb的grep 匹配有误,已修复。谢谢@今朝几朵白云生 的帖子
  1. #!/bin/bash
  2. #set -x
  3. #NCARG_ROOT="/n/home05/packard/sw/ncl-6.4.0"
  4. NCL_SOURCE="${NCARG_ROOT}/source-6.4.0/"  # https://www.earthsystemgrid.org/dataset/ncl.640.src/file/ncl_ncarg-6.4.0.tar.gz

  5. grep -rin "undef("$1")" "${NCARG_ROOT}/lib/ncarg/nclscripts/"

  6. wrka=$1
  7. nl=0
  8. while [ -n "$wrka" ] && [ $nl -lt 5 ]; do
  9.   wrkz=$wrka
  10. #  wrkb=`grep -l ${wrka} "${NCARG_ROOT}"/lib/*`
  11. #  wrkb=`nm -A --defined-only "${NCARG_ROOT}"/lib/*.a |grep -i "T ${wrka}[_$]"`
  12.   wrkb=`nm -A --defined-only "${NCARG_ROOT}"/lib/*.a |grep -Ei "T ${wrka}_(W)?$"`
  13.   echo $wrkb
  14. #  wrkc=`sed 's?^.*lib\([^/]*\)\.a?\1?' <<< "$wrkb"`
  15.   wrkc=`sed 's?^[^:]*lib\([^/]*\)\.a:.*$?\1?' <<< "$wrkb"`
  16.   echo $wrkc
  17.   wrkd=`find "${NCL_SOURCE}" -name "$wrkc" -type d`
  18.   echo $wrkd
  19. #  grep -l ${wrka}_W ${wrkd}/*W.c  # only nfp
  20.   grep -il ${wrka} ${wrkd}/*
  21.   #sed -sn "/${wrka}_W/,/NhlErrorTypes/p" ${wrkd}/*W.c |grep NGCALLF
  22. #  wrka=`sed -sn "/${wrka}_W/,/NhlErrorTypes/s/^\s*NGCALLF(\([a-zA-Z]*\>\).*$/\1/p" ${wrkd}/*W.c`
  23.   wrka=`sed -sn "/${wrka}_W/,/NhlErrorTypes/s/^\s*NGCALLF(\([a-zA-Z]*\>\).*$/\1/p" ${wrkd}/*`
  24.   echo $wrka
  25.   nl=$((nl+1))
  26. done
  27. grep -in $wrkz ${wrkd}/*

  28. # \grep '^syn keyword nclBUILTIN' ~/.vim/syntax/ncl.vim
  29. #grep "$1" ~/.vim/syntax/ncl.vim | awk '{print $3}'

复制代码
效果图1:
Capture-weibull.PNG
效果图2:
Capture-wrf-user-ll-to-ij.PNG

这个脚本在公测阶段,欢迎任何建议和反馈~
Enjoy!


评分

参与人数 3金钱 +30 贡献 +6 收起 理由
Derry德 + 5 很给力!
mofangbao + 15 + 5
打破砂锅纹到底 + 10 + 1 感谢楼主分享

查看全部评分

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-3-28 11:55:01 | 显示全部楼层
吵吵人 发表于 2018-3-27 15:47
请问“新建~/bin/gncl 文件”中的gncl文件后缀是什么,cygwin的新建命令是什么?(纯小白一个,跪谢赐教! ...

谢谢你对本帖的关注。这个脚本使用了很多Linux Bash的语法和命令,大概是不适用在Cygwin。
如果你非常需要这样的脚本,鼓励你试试按下面的链接安装 Win10(64位)系统下的Linux子系统的ncl。这样的话,应该就跟真正的Linux Bash没有区别了。在Linux系统下,gncl 文件可以不用后缀。
http://bbs.06climate.com/forum.p ... 1&fromuid=87401
但话又说回来,如果还是初学者的话,短期内可能还用不着搜索理解ncl的源代码吧。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-2-2 16:32:37 | 显示全部楼层
{:eb502:}{:eb502:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-2-3 15:44:25 | 显示全部楼层
神人啊,必须顶起
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-2-7 14:01:49 | 显示全部楼层
很不错的东西,谢谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-2-7 14:40:22 | 显示全部楼层
楼主Powerful!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-2-8 09:30:25 | 显示全部楼层
很不错的东西,谢谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-2-23 10:11:56 | 显示全部楼层
神人,赞赞赞!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-2-23 19:33:20 | 显示全部楼层
感谢你的分享,对我有很大帮助
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-3-27 15:31:58 | 显示全部楼层
你好,因为我的等级太低,不能发消息,不知道能不能留一个可以联系的方式,指导一二?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-3-27 15:47:30 | 显示全部楼层
请问“新建~/bin/gncl 文件”中的gncl文件后缀是什么,cygwin的新建命令是什么?(纯小白一个,跪谢赐教!)
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表