shell命令之一天一见:awk
AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。 这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·溫伯格和布萊恩·柯林漢姓氏的首个字母)的最大功能取决于一个人所拥有的知识.
一、工作方式:
简而言之,awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。也就是说,他的输出是一数组,我们可以从中选出我们想要的内容。
二、使用方法:
awk '{pattern + action}' {filenames}
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。awk以文件的一行为处理单位,每接受一行就处理一行,并执行之后的命令。
三、调用方法
1、最简单,最常用的方法:命令行, awk [ -F field-separator] 'commands' input-file
-F :域分割符,也就是上面的pattern,默认(也就是不指定F)的域分割符是空格或者tab键,command 是要执行的命令,input-file 是要出来的文件。 在文件test.dat中有一下内容, 如果想得到第二列的东西,可以用awk。 var=value 赋值一个用户定义的变量,将外部变量传递给wak。
longpengpeng@PC-201604021910:~/work$ cat test.dat
jk akjgk:1
sks q:2
lsf e:2
msfm w:3
ma w:4
al w:3
amle:3
amlw:9
longpengpeng@PC-201604021910:~/work$ awk '{print $2}' test.dat
jk
sks
lsf
msfm
ma
al
amle:3
amlw:9
如果想指定域分隔符F,
longpengpeng@PC-201604021910:~/work$ awk -F ':' '{print $2}' test.dat
1
2
2
3
4
3
3
9
如果使用pattern,则使用 -F: 而不是 -F。如果pattern 是“root”,则 -F:’/root/‘
二、awk脚本基本构造
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file eg:
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
在执行的过程中, BEGIN语句块(可选语句块)在开始从awk读取行时就被执行,也可以放变量初始化、打印输出表格的表头等语句。END语句块是在awk中的行全部读取后再执行,可以放打印所有行的分析结果这类信息汇总等,这也是可选语句。pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
最新文章
- ASCIITable: 演示 Arduino 串口输出的进阶功能
- perl中常见的语法规则和函数
- Unity3D核心类型一览
- PHP stat() 函数 返回关于文件的信息。
- HDU2079选课时间(母函数)
- 第十四章 红黑树——C++代码实现
- Arcgis Android 基本概念 - 浅谈
- ubuntu 安装RPM软件包
- applicationContext.xml的配置
- es6箭头函数讲解
- Binary Search 的递归与迭代实现及STL中的搜索相关内容
- cafee编译错误几个总结
- C++ operator 学习
- [转]TopShelf 用法
- mysql 8.0 ~ 存储和账户
- 【Java基础】9、Enumeration接口和Iterator接口的区别
- eclipse中怎么调出左边项目列表,解决方法:主界面的最上面一栏的Window--ShowView--Project Explorer
- CreateThread和_beginthread区别及使用
- 使用客户端等远程连接mysql数据库
- Codeforces Round #257 (Div. 2 ) B. Jzzhu and Sequences
热门文章
- 文档对象DOM的操作及使用
- Sample Code之Take a screenshot of a SceneView
- swiper如何禁止左右箭头切换
- invalid expression: missing ) after argument list in xxx 或者 console.error((";[Vue warn]: "; + msg + trace));
- 1、纯python编写学生信息管理系统
- JS中Cookie、localStorage、sessionStorage三者的区别
- window 10 安装Oracle odac 64位
- Window初始化Git环境
- $.fn.serializeObject对为disabled属性的失效
- 有关lightning页面中页面加载时间计数器颜色分别表示的时间范围的问题