awk用法

Linux评论1阅读模式

awk被设计用于数据流,它可以对列和行进行操作,awk有很多内建的功能,比如数组、函数等,它和C语言有相同之处。灵活性是awk最大的优势。
awk脚本的结构基本如下:
awk ‘BEGIN{ print “start”} pattern { commands } END { print “end” }’ file
一个awk脚本通常由3个部分组成:BEGIN语句块、END语句块和能够使用模式匹配的通用语句块。这3个部分是可选的,它们中任何一个部分都可以不出现在脚本中。脚本通常会被包含在单引用或双引号中

工作原理
1) 执行BEGIN { comands } 语句块中的语句
2) 从文件或stdin中读取一行,然后执行patern { commands }。重复这个过程,知道文件全部被读取完毕
3) 当读至输入流末尾时,执行END { commands } 语句块
BEGIN语句块在awk开始从输入流中读取行之前被执行。这是一个可选的语句块,如变量初始化、打印输出表格的表头等语句通常都可以写入BEGIN语句块中
END语句块和BEGIN语句块类似。END语句块在awk从输入流中读取完所有的行之后即被执行。像打印所有行分析结果这类汇总信息,都是在END语句块中实现的常见任务。它也是一个可选的语句块
最重要的部分就是pattern语句块中的通用命令。这个语句块同样是可选的。如果不提供该语句块,则默认执行{ print },即打印每一个读取到的行。awk对于读取的每一行,都会执行这个语句块
这就像一个用来读取行的while循环,在循环体中提供了相应的语句
每读取一行时,它就会检查该行和提供的样式是否匹配。样式本身可以是正则表达式、条件以及行匹配范围等。如果当前行匹配该样式,则执行{ }中的语句
样式是可选的。如果没有提供样式,那么它就会默认所有的行都是匹配,并执行{ }中的语句

以下是可以用于awk的一些特殊变量
ARGC: 命令行变元个数
ARGV: 命令行变元数组
FILENAME: 当前输入文件名
FNR: 当前文件中的记录号
OFS: 输出域分隔符
ORS: 输出记录分隔符
FS: 输入域分隔符,默认为一个空格
RS: 输入记录分隔符
NR: 表示记录数量(number of records),在执行过程中对应于当前行号
NF:表示字段数量(number of fields),在执行过程中对应于当前行的字段数
S0:这个变量包含执行过程中当前行的文本内容
S1:这个变量包含第一个字段的文本内容
S2:这个变量包含第二个字段的文本内容

 
  • 本文由 yeho 发表于 2012-03-07
  • 转载请务必保留本文链接:https://linuxeye.com/105.html
读《sed与awk》第1~3章笔记 脚本

读《sed与awk》第1~3章笔记

sed、awk功能 sed 在一个或多个文件上自动实现编辑操作 简化对多个文件执行相同的编辑处理工作 编写转换程序 awk 将文本文件看做由记录和字段组成的文本数据库 使用变量操作数据库 使用算术和字...
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证