爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14028|回复: 14

[经验总结] 气象数据处理脚本篇(三):CSV文件

[复制链接]

新浪微博达人勋

发表于 2012-6-17 16:56:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 雪花纷飞 于 2012-6-17 16:57 编辑

       前面两篇讨论了对txt数据的处理,本篇则讨论下CSV数据的处理。处理的大致思路相同,主要区别在于CSV数据列(或称字段)与列之间用逗号隔开,而txt一般用空格隔开
       以下对CSV格式的介绍来自于网络。
       CSVComma Separated Values,逗号分隔型取值格式,是一种纯文本格式,用来存储数据,用逗号分隔字段(用vim打开可发现这点)。CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符。字段包含特殊字符(逗号,换行符,或双引号),必须以双引号括住。行内包含一个项目是空字符串,可以以双引号括住。字段的值包含双引号时,要双写这个双引号(就像把一个双引号当做转义符一样)。
003-1.png

  图1 excel打开csv文件情形

003-2.png


2 gvim打开csv文件情形



由图1和图2对比可以看出:

  • csv文件字段以逗号作为分隔符,行结束不用逗号
  • 如果字段中出现逗号等特殊字符,字段值必须用双引号" "括起来; (对比第五行第一列)
  • 如果行中某一字段为空,能需要逗号分隔以示其存在。(对比第四行第二列)

003-3.png


                                                                                 图3  wind_201101.csv


处理要求:现有数据wind_201101.csv(见图3),提取datevwind两列到新建文件vwind_201101.csv


需要解决两个问题
1.由于awk输入字段分隔符内置变量为FS,默认字段分隔符FS值是空格或tab,而CSV文件字段分隔符是逗号,所以需要改变FS值,有两种方法,通过在BEGIN语句中赋值或命令行加选项-F赋值。
  1. awk -F","  '{print $1 , $3}'  wind_201101.csv
复制代码


003-4.png


                                                                                 图4 输出结果

2.可以从上图看出,默认输出字段分隔符是单个空格,被保存在内置变量OFS中。如果用OFS默认值,$1$3之间的逗号会被转换成单个空格,print函数打印这两个字段时会在它们之间加上一个空格。由于要求保存为CSV文件,OFS要设置成逗号分隔符,有两种方法,通过在BEGIN语句中赋值或$1$3之间逗号加上双引号。

  1. awk -F","  '{print $1 "," $3}'  wind_201101.csv
复制代码


003-5.png



                                                                                  图5 输出结果

3.将输出结果写入vwind_201101.csv中:

  1. awk -F","  '{print $1 "," $3}'  wind_201101.csv > vwind_201101.csv
复制代码


  1. awk 'BEGIN{FS="," ; OFS="," }{print $1,$3}'  wind_201101.csv >vwind_201101.csv
复制代码

*******************************************************************************
        后记:写到这里感觉没有什么可写的了。由于气象数据格式众多,处理要求各不相同,因此处理方法差别很大。但基本思路应该是一样的。因本人所学专业方向平时接触到的气象数据不多,因此无法给出更切实际的例子。这里也欢迎大家提供数据样本和处理要求,我们共同讨论,共同进步。如有可能,下次讲讲气象数据中更加实际的例子,不过暂时没有了{:soso_e139:}

评分

参与人数 1金钱 +10 贡献 +3 收起 理由
mofangbao + 10 + 3

查看全部评分

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

新浪微博达人勋

发表于 2012-6-17 18:56:09 | 显示全部楼层
抢个沙发,关注楼主持续更新
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-6-17 19:11:06 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-23 23:38:06 | 显示全部楼层
感谢分享!!!!!!!!!!!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-14 11:26:43 | 显示全部楼层
谢谢分享,学习到了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-13 10:48:04 | 显示全部楼层
学习学习,感谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-16 21:15:50 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-12-23 15:36:35 | 显示全部楼层
期待啊,本人鄙陋,还没有见过二进制格式的bash脚本批处理
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-23 21:17:35 | 显示全部楼层
感谢分享!!!!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-1-16 16:22:51 | 显示全部楼层
谢谢分享,但我的问题还是没有得到解决。。。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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