阳光石油网|石油技术交流|石油人论坛

 找回密码
 欢迎注册
查看: 8040|回复: 5

你还在为数据格式转换而苦恼吗?——石油物探人员必须了解的一项技能

[复制链接]
  • TA的每日心情
    开心
    2021-5-31 22:03
  • 签到天数: 144 天

    [LV.7]常住居民III

    发表于 2018-3-24 10:23:38 | 显示全部楼层 |阅读模式

    马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。

    您需要 登录 才可以下载或查看,没有账号?欢迎注册

    x
    本帖最后由 zl_ming 于 2018-3-24 21:52 编辑

    做物探或建模的朋友都有过一个痛苦的经历——层位或断层数据就是加不进去,老是报错,不得其解,领导着急,自己也郁闷,今天怎么就被小小的一个输入输出给卡住了。

    如果您精通Excel的VBA编程或您是一名C/C++高手,此文您可以忽略,如果您只有那么一点点C语言基础,那么本文对你会非常有用,如果一点C不懂也没关系,看完本文后,你也能快速掌握如何使用AWK。


    以前有一个老师傅说过,学软件首先要学得就是如何加载数据,只有各种数据都会正确加载了,才有可能去尝试各种新流程与创意。

    应运而生行业有了各种数据桥软件,但那些个软件使用是在固定的套路、固定的对象之前运用,突然有一个第三方或超出现有范围的数据要加载,就会被卡住。

    如果您有了AWK工具,一切都是那么随心所欲!
    简单来说awk是Linux的一个基本命令,它可以把文件逐行的读入,以空格为默认分隔符将每行切开,切开的部分再进行各种分析处理。

    先来看一看AWK有什么强大的地方?
    例如,有这么一个地震层位文件a.txt,而我只想要其中的3、4、5列数据:
    • [focus@kestVM1 /disk1]$ more a.txt

    • 1889     1400       633111.00      5334291.00      1586.14421
    • 1889     1401       633128.67      5334273.32      1586.78114
    • 1889     1403       633164.03      5334237.96      1591.58540
    • 1889     1404       633181.70      5334220.28      1592.64648



    那么我只需要在Linux命令行输入如下代码:
    • [focus@kestVM1 /disk1]$ awk '{print $3, $4,$5}' a.txt > b.txt



    那么就得到了以下结果:
    • [focus@kestVM1 /disk1]$ more b.txt


    • 633111.00 5334291.00 1586.14421
    • 633128.67 5334273.32 1586.78114
    • 633164.03 5334237.96 1591.58540
    • 633181.70 5334220.28 1592.64648



    如果需要加上15的带号,并将它们列之前加大一些空格,也得简单:
    • [focus@kestVM1 /disk1]$ awk '{printf("%15.2f%15.2f%15.2f\n",$3+15000000, $4,$5)}' a.txt > b.txt


    • [focus@kestVM1 /disk1]$ more b.txt


    • 15633111.00     5334291.00        1586.14
    • 15633128.67     5334273.32        1586.78
    • 15633164.03     5334237.96        1591.59
    • 15633181.70     5334220.28        1592.65



    怎么样?很实用吧!
    解释一下,$1即表示读入的是第一列,$2是第二列,printf与C语言的用法是一致的。”>”是定向输出符,表示输出到哪一个文件。
    而且,此代码我们可以加入更多功能,辟如判断大小等等,做好后还可以保存以后备用。
    AWK本身内置了很多变量,如当前行号等等,语法可以用C的或类C语法,可谓很强大。欲了解更多AWK的基本用法,可以在Linux终端下查看man帮助或直接百度看中文的。

    好多物探大咖们为什么加载工区那么快,就是他们自备了符合各自工作习惯的转换代码,非常高效。

  • TA的每日心情
    擦汗
    2018-5-15 12:03
  • 签到天数: 81 天

    [LV.6]常住居民II

    发表于 2018-3-24 21:39:03 | 显示全部楼层
    表示看不懂
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-5-31 22:03
  • 签到天数: 144 天

    [LV.7]常住居民III

     楼主| 发表于 2018-3-24 21:49:48 | 显示全部楼层

    当你的拿到的输入文件格式不标准时,这个非常管用的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-21 20:49
  • 签到天数: 1513 天

    [LV.Master]伴坛终老

    发表于 2018-3-25 09:46:55 | 显示全部楼层
    用过,确实很好用,老师,这个有微机win下的模拟版本么,以前试过,没弄成功,有时候手头没有Linux,就不方便了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-5-31 22:03
  • 签到天数: 144 天

    [LV.7]常住居民III

     楼主| 发表于 2018-3-25 11:22:47 | 显示全部楼层

    在windows下没有,但你可以在wendows下用 perl 可以很容易做类似操作
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-21 20:49
  • 签到天数: 1513 天

    [LV.Master]伴坛终老

    发表于 2018-3-25 15:02:28 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 欢迎注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|阳光石油网 ( 鲁ICP备2021003870号-1 )

    GMT+8, 2024-12-23 05:51 , Processed in 0.052290 second(s), 19 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

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