马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
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帮助或直接百度看中文的。
好多物探大咖们为什么加载工区那么快,就是他们自备了符合各自工作习惯的转换代码,非常高效。
|