admin 发表于 2016-10-21 16:10:24

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

题目:
1.你还在为文本数据格式转换而苦恼吗?——石油物探人员必须了解的技能2.你还在为地震层位、速度场的格式转换而苦恼吗?——神奇的AWK工具来帮你!3.自力更生,丰衣足食——物探大伽教你如何快速转换数据格式
做物探或建模的朋友都有过一个痛苦的经历——层位或断层数据就是加不进去,老是报错,不得其解,领导着急,自己也郁闷,今天怎么就被小小的一个输入输出给卡住了。
如果您精通Excel的VBA编程或您是一名C/C++高手,此文您可以忽略,如果您只有那么一点点C语言基础,那么本文对你会非常有用,如果一点C不懂也没关系,看完本文后,你也能快速掌握如何使用AWK。

以前有一个老师傅说过,学软件首先要学得就是如何加载数据,只有各种数据都会正确加载了,才有可能去尝试各种新流程与创意。
应运而生行业有了各种数据桥软件,但那些个软件使用是在固定的套路、固定的对象之前运用,突然有一个第三方或超出现有范围的数据要加载,就会被卡住。
如果您有了AWK工具,一切都是那么随心所欲!简单来说awk是Linux的一个基本命令,它可以把文件逐行的读入,以空格为默认分隔符将每行切开,切开的部分再进行各种分析处理。
先来看一看AWK有什么强大的地方?例如,有这么一个地震层位文件a.txt,而我只想要其中的3、4、5列数据:$ 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命令行输入如下代码:$ awk '{print $3, $4,$5}' a.txt > b.txt
那么就得到了以下结果:$ more b.txt633111.00 5334291.00 1586.14421
633128.67 5334273.32 1586.78114
633164.03 5334237.96 1591.58540
633181.70 5334220.28 1592.64648
如果需要加上15的带号,并将它们列之前加大一些空格,也得简单:$ awk '{printf("%15.2f%15.2f%15.2f\n",$3+15000000, $4,$5)}' a.txt > b.txt
$ more b.txt15633111.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帮助或直接百度看中文的。
好多物探大咖们为什么加载工区那么快,就是他们自备了符合各自工作习惯的转换代码,非常高效。
页: [1]
查看完整版本: 你还在为数据格式转换而苦恼吗?——石油物探人员必须了解的一项技能