爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10540|回复: 13

[图形美化] grads提取nc到txt

[复制链接]

新浪微博达人勋

发表于 2017-7-26 17:25:55 | 显示全部楼层 |阅读模式

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

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

x
用grads提取nc数据到txt,直接在界面上运行gs,然后显示变量,可以显示出txt格式的数据,但没有相应的文件生成。

QQ截图20170726174443.png
'reinit'
'sdfopen /data3/zhouhb/models/RegCM/RegCMcase/TRS/DATE/B20TRC5/AER/AOD-MAM.nc'
'set fwrite /data3/zhouhb/models/AOD-MAM.txt'
'set gxout print'
'set prnopts %10.3f 156 1'
'set x 1 144'
'set y 1 96'
'set z 1'
it=1
while(it<=156)
'set t 'it''
'd aodvis'
'c'
it=it+1
endwhile
'disable fwrite'
;
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-26 19:15:24 | 显示全部楼层
set fwrite命令是用来输出二进制数据的,在这怎么用,根本就不对的。你自己多去官网看看例子吧

Output Gridded Data in ASCII Format

1. GrADS can create ascii output for any display with the 'set gxout print' option. The formatting of the output is controlled with the 'set prnopts' command. The output is printed to the command window, but it is also stored in the internal variable 'result' inside a script, where it can be easily output to a file. Below is a simple script example to write formatted ascii output to a file. Note that the choice of writing 72 numbers per line is based on the X dimension of the grid being displayed.

'open /data/grib/model/model.ctl'
'set x 1 72'
outfile = 'my_ascii_file.txt'
'set gxout print'
'set prnopts %7.3f 72 1'
'd ts'
rc = write(outfile,result)
The beginning of the file my_ascii_file.txt looks like this:

Printing Grid -- 3312 Values -- Undef = -9.99e+08
258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 <etc.>   
2. In the above example, note that the first line of the output file will contain some diagnostic information about the number of values written and the undef value. If you want to omit that line and write out just the ascii data, then use this slightly more complicated version of the script which skips over the first line of diagnostic info. Two other changes in this example are in the formatting (the output will be comma delimited for importing into a spreadsheet) and the displayed variable, which is now an expression instead of a variable name. It is not necessary to 'define' the expression before displaying it.

'open /data/grib/model/model.ctl'
'set x 1 72'
outfile='my_ascii_file.txt'
'!/bin/rm -f 'outfile
'set gxout print'
'set prnopts %g, 72 0'
'd ts-273.15'
i=1
while (1)
  line = sublin(result,i)
  if (line = ''); break; endif
  if (i>1)
    rc = write(outfile,line,append)
  endif
  i=i+1
endwhile
Now the beginning of the output file my_ascii_file.txt looks like this:

-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,<etc.>
3. If you want to write out the grid information along with data from more than one variable, then you must save the result from the display of each variable/expression (including longitude and latitude), parse each data point individually, construct the line of ascii output, and then write it out. Here is an example the writes out longitude, latitude, surface temperature, surface pressure, and precipitation:

'open /data/grib/model/model.ctl'
'set x 1 72'
outfile='my_ascii_file.txt'
'!/bin/rm -f 'outfile
'set gxout print'
fmt='%8.3f'
numcols=72
'set prnopts 'fmt' 'numcols' 1'
'd lon'
lon_data = result
'd lat'
lat_data = result
'd ts'
v1_data = result
'd ps'
v2_data = result
'd p'
v3_data = result
i=1
while (1)
  lons  = sublin(lon_data,i)
  lats  = sublin(lat_data,i)
  line1 = sublin(v1_data,i)
  line2 = sublin(v2_data,i)
  line3 = sublin(v3_data,i)
  if (lons='' | lats='' | line1='' | line2='' | line3=''); break; endif
  if (i>1)
    j=1
    while (j<=numcols)
      str = subwrd(lons,j); lon = math_format(fmt,str)
      str = subwrd(lats,j); lat = math_format(fmt,str)
      str = subwrd(line1,j); v1 = math_format(fmt,str)
      str = subwrd(line2,j); v2 = math_format(fmt,str)
      str = subwrd(line3,j); v3 = math_format(fmt,str)
      record = lon' 'lat' 'v1' 'v2' 'v3
      rc = write(outfile,record,append)
      j=j+1
    endwhile
  endif
  i=i+1
endwhile
Now the head of the output file my_ascii_file.txt looks like this:

   0.000  -90.000  258.493  669.911    0.000
   5.000  -90.000  258.493  669.911    0.000
  10.000  -90.000  258.493  669.911    0.000
  15.000  -90.000  258.493  669.911    0.000
  20.000  -90.000  258.493  669.911    0.000
  25.000  -90.000  258.493  669.911    0.000
  30.000  -90.000  258.493  669.911    0.000
  35.000  -90.000  258.493  669.911    0.000
  40.000  -90.000  258.493  669.911    0.000
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-26 22:29:55 | 显示全部楼层
楼主下次使用命令前应该多了解一点它的用法
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-27 15:53:47 | 显示全部楼层
本帖最后由 酒国 于 2017-7-27 16:19 编辑
river 发表于 2017-7-26 19:15
set fwrite命令是用来输出二进制数据的,在这怎么用,根本就不对的。你自己多去官网看看例子吧

Output G ...

谢谢指点,我现在转出txt来了,只是排放顺序有点问题,还是多谢
11.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-27 16:10:41 | 显示全部楼层
风之精灵 发表于 2017-7-26 22:29
楼主下次使用命令前应该多了解一点它的用法

好的,多谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-27 17:38:19 | 显示全部楼层
酒国 发表于 2017-7-27 15:53
谢谢指点,我现在转出txt来了,只是排放顺序有点问题,还是多谢

其实可以使用兰溪的grads2ascii脚本来转换,相对更简单一些。论坛里搜索就能找到了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-28 08:22:09 | 显示全部楼层
river 发表于 2017-7-27 17:38
其实可以使用兰溪的grads2ascii脚本来转换,相对更简单一些。论坛里搜索就能找到了

嗯嗯,看到过。还差一个贡献,无法下载(自动回复:请不要使用迅雷等下载工具,点我查看下载帮助)。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-28 10:59:48 | 显示全部楼层
本帖最后由 酒国 于 2017-7-28 11:03 编辑


river你好。我提取出txt,排放也对了,为何用清风的EOF可视化画出来的这样。是我数据提取有问题吗?(没找到怎么取消下载的金钱)
我是想提取50年全球范围的AOD(只有一层)。
下面是我的gs:
'reinit'
'sdfopen /data3/zhouhb/models/RegCM/RegCMcase/TRS/DATE/B20TRC5/AER/AOD-MAM.nc'
outfile='/data3/zhouhb/models/asciifile3.txt'
ia=1
while(ia<=144)
'set x 'ia''
ib=1
while(ib<=96)
'set y 'ib''
'set t 107 156'
'set z 1'
'set gxout print'
'set prnopts %10.3f 50 1'
'd aodvis*3'
i=1
while (1)
  line = sublin(result,i)
  if (line = ''); break; endif
  if (i>1)
    rc = write(outfile,line,append)
  endif
  i=i+1
endwhile
ib=ib+1
endwhile
ia=ia+1
endwhile
11111.png

asciifile3.txt

7.28 MB, 下载次数: 2, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2017-7-28 12:02:57 | 显示全部楼层
酒国 发表于 2017-7-28 10:59
river你好。我提取出txt,排放也对了,为何用清风的EOF可视化画出来的这样。是我数据提取有问题吗?( ...

你是grads新手?我记得你是论坛的老人了啊。
你提取资料肯定不对啊,时间是外循环,时间才是需要用while来循环的,至于经纬度直接set x 1 144     set y 1 96
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-28 14:10:36 | 显示全部楼层
river 发表于 2017-7-28 12:02
你是grads新手?我记得你是论坛的老人了啊。
你提取资料肯定不对啊,时间是外循环,时间才是需要用while ...

受教。我之前做过这种,这种排列方式每一行表示一段时间N个点,我在设置每行点的个数上出了问题。现在已经调好了。我有点不太明白,我想每一行表示一个点的一段时间,这样来排列,上面的gs是想实现这个功能。13824行(格点数),50列(50年),那样写问题出在哪?是经纬度开始值有问题?
图片1.png
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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