Linux命令之awk:基础知识(一)

语法形式:

awk [options] ‘script’ var=value file(s)正则表达式

awk [options] -f scriptfile var=value file(s)数组

经常使用选项:

  • -F :fs fs指定输入分隔符,fs能够是字符串或正则表达式,如-F:
  • -v :var=value 赋值一个用户定义变量,将外部变量传递给awk
  • -f :scripfile 从脚本文件中读取awk命令
  • -m :[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

awk模式和操做

awk脚本是由模式和操做组成的。bash

模式:

模式能够是如下任意一个:函数

  • /正则表达式/:使用通配符的扩展集。
  • 关系表达式:使用运算符进行操做,能够是字符串或数字的比较测试。
  • 模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
  • BEGIN语句块、pattern语句块、END语句块:参见awk的工做原理

操做:

操做由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:测试

  • 变量或数组赋值
  • 输出命令
  • 内置函数
  • 控制流语句

awk脚本基本结构

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

一个awk脚本一般由:BEGIN语句块、可以使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分均可以不出如今脚本中,脚本一般是被单引号或双引号中,例如:spa

awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename

awk的工做原理

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:执行BEGIN{ commands }语句块中的语句;code

第二步:从文件或标准输入(stdin)读取一行,而后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件所有被读取完毕。ip

第三步:当读至输入流末尾时,执行END{ commands }语句块。字符串

  • BEGIN语句块在awk开始从输入流中读取行以前被执行,这是一个可选的语句块,好比变量初始化、打印输出表格的表头等语句一般能够写在BEGIN语句块中。
  • END语句块在awk从输入流中读取完全部的行以后即被执行,好比打印全部行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
  • pattern语句块中的通用命令是最重要的部分,它也是可选的。若是没有提供pattern语句块,则默认执行{ print },即打印每个读取到的行,awk读取的每一行都会执行该语句块。
相关文章
相关标签/搜索