awk学习笔录(一)
2015-08-19 10:25
204 查看
awk是一门脚本处理语言,对于处理格式化的文本而言非常方便。下面结合自己实际过程中的使用体会做一些总结。
通常,根据使用目的,如果脚本执行没有输入文件,只需要有BEGIN{}或(和)END{}即可;如果不需要预处理或(和)善后处理,则只需要/模式/{}部分即可。
需要额外注意的是,当脚本连续处理多个文本文件时,BEGIN{}和END{}对每个输入文本文件都会执行一次。
对于终端输入执行,其书写格式为:awk ‘脚本内容’ 文本文件名(可以多个文本文件,空格分隔)
对于执行脚本文件,其书写格式为:awk -f 脚本文件名 文本文件名(可以多个文本文件,空格分隔)
awk -F “,”file (逗号用单、双引号括起都是可以的)
awk ‘BEGIN{FS=”,”}’ file(逗号只能用双引号括起)
如果想设置一个以上分隔符,格式类似如下:
awk -F “[,:]” file
awk ‘BEGIN{FS=”[,:]”}’ file
FS 字段分隔符
OFS 输出字段分隔符
RS 记录分隔符(默认是一个回车)
ORS 输出记录分隔符(默认是一个回车)
NF 当前记录中的字段数
NR 当前记录数。从1开始。
FILANAME 当前输入文本文件名
SUBSEP 数组下标分隔符(默认是’\034’)
IGNORECASE 设为1表示忽略大小写
数值型变量不需要初始化,默认会从0开始加。
break, continue用法同C语言
next 从输入文件中读取一行,然后从头开始执行awk脚本
exit 结束awk程序,但不会略过END块。退出状态为0代表成功,非零值表示出错。
awk里的函数没有返回类型,形参也没有类型。函数可以定义在BEGIN{}前,也可以定义在END{}后。
执行原理
awk脚本由3部分组成,BEGIN{}、/模式/{}和END{}。BEGIN{}用来进行一些预设置,比如初始化变量,END{}用来做一些善后处理,所以两者对于一个文本文件来说只执行一次,而中间的/模式/{}部分以行为单位,文本文件的每一行都会执行一次。通常,根据使用目的,如果脚本执行没有输入文件,只需要有BEGIN{}或(和)END{}即可;如果不需要预处理或(和)善后处理,则只需要/模式/{}部分即可。
需要额外注意的是,当脚本连续处理多个文本文件时,BEGIN{}和END{}对每个输入文本文件都会执行一次。
执行方法
awk脚本既可以写到文件中,也可以直接在终端书写并执行。对于较短的脚本,可以选择在终端输入执行。为了便于反复执行的便利和效率,一般将脚本内容写入文件。对于终端输入执行,其书写格式为:awk ‘脚本内容’ 文本文件名(可以多个文本文件,空格分隔)
对于执行脚本文件,其书写格式为:awk -f 脚本文件名 文本文件名(可以多个文本文件,空格分隔)
分隔符的设置
默认分隔符是占位符,包括空格和tab。如果需要更改默认分隔符,以逗号为例,格式如下:awk -F “,”file (逗号用单、双引号括起都是可以的)
awk ‘BEGIN{FS=”,”}’ file(逗号只能用双引号括起)
如果想设置一个以上分隔符,格式类似如下:
awk -F “[,:]” file
awk ‘BEGIN{FS=”[,:]”}’ file
学习技巧
通常awk的语法格式和c语言是非常类似的,因此,对于不熟悉的语法完全可以往c语言上靠。不过,一些差异还是有的。书写格式
awk语句末尾可以没有分号,直接换行。如果多个语句在同一行,需要加分号。环境变量
环境变量是内置变量,直接使用。常用的一些变量如下:FS 字段分隔符
OFS 输出字段分隔符
RS 记录分隔符(默认是一个回车)
ORS 输出记录分隔符(默认是一个回车)
NF 当前记录中的字段数
NR 当前记录数。从1开始。
FILANAME 当前输入文本文件名
SUBSEP 数组下标分隔符(默认是’\034’)
IGNORECASE 设为1表示忽略大小写
变量
awk没有类型的概念,也不需要定义,直接使用。但最好的方法是,一个变量只存一种类型,以免混乱。数值型变量不需要初始化,默认会从0开始加。
条件语句
if else, while, for用法同C语言break, continue用法同C语言
next 从输入文件中读取一行,然后从头开始执行awk脚本
exit 结束awk程序,但不会略过END块。退出状态为0代表成功,非零值表示出错。
数组
awk的数组为关联数组。只有一维数组,不支持二维数组,但可以模拟二维数组。函数
自定义函数的格式如下:function name(parameter1,parameter2, ...) { statement }
awk里的函数没有返回类型,形参也没有类型。函数可以定义在BEGIN{}前,也可以定义在END{}后。
相关文章推荐
- 小猪猪教你如何找回相机存储卡内的丢失数据
- Java线程:创建与启动
- 关于Linux的 ps -l 命令,显示数据中F表示含义
- 【资料收藏】OTL技术
- 两个Activity之间跳转时,生命周期的执行顺序
- 常量指针与指针常量的区别
- Volitale
- iphone绘图的几个基本概念CGPoint、CGSize、CGRect、CGRectMake、window(窗口)、视图(view)
- cordova 项目导入eclipse中不显示assets和config.xm的解决方法
- 全面理解 Unity UI 系统
- UE3 贴图支持及设置
- Hardware Requirements for SAProuter
- 剑指offer 两个栈实现队列
- 小胖说事36----iOS通过js 获取webview中的html内容
- Windows+Nginx+IIS做图片分布式存储详细步骤
- LeetCode Insert Interval
- 杂记c-----小写金额转化成大写数字;点击表格table时,当前被点击的tr行变色,其它行不变色;input隐藏显示
- 聪明的打字员---poj1184(bfs)
- UVa 11400 Lighting System Design(DP 照明设计)
- poj 3126 Prime Path (BFS)