awk是一种用于处理文本的编程语言工具,一种模式扫描和处理语言。
使用类似于C的语法,并在很多方面类似于shell编程语言。awk支持流程控制、数学运算、进程控制语句设置内置的变量和函数。
awk不会修改输入文件的内容。
awk命令的格式
格式1:awk [option] 'program-statements' [input-file]...
执行命令行上的awk程序语句,若一行上有多个awk语句,使用分号(;)间隔
格式2:awk [option] -f program-file [input-file]...
执行脚本文件program-file中的awk语句
常用参数
-F fs:在awk中,默认的字段分隔符一般是空格符或TAB,在-F后面设置字段分隔符
-v var=val:对变量var赋初值为val,可以是内置变量也可以是自定义变量
awk中的每一个语句由两部分组成:模式(pattern)和相应的动作(actions)。只要模式匹配,awk就会执行相应的动作。动作部分由一个或多个命令、函数、表达式组成,其间由换行符或分号隔开,并位于大括号内。
1.pattern和{actions}可以省略,但不能同时省略
2.pattern省略时,对所有的输入行执行{actions}
3.{actions}省略时,打印匹配行
模式部分可以是:
1./regular expression/:扩展的正则表达式
2.relational expression:关系表达式
3.pattern1,pattern2:范围模式,匹配行的范围
4.BEGIN:指定第一条输入记录被处理之前要执行的动作,通常在此设置全局变量
5.END:指定最后一条记录被读取之后要执行的动作,通常在此输出统计数据
动作部分可以是:
1.变量或数组赋值
2.输入/输出语句
3.内置函数和自定义函数
4.流程控制语句
awk命令的一般形式
awk 'BEGIN {actions}
pattern1 {actions}
...
pattern2 {actions}
END {actions}' input-file
步骤1:
如果存在BEGIN,首先执行它指定的actions
步骤2:
从输入中读取一行,称为一条输入记录
步骤3:
将读入的记录分割成数个字段,将第一个字段放入变量$1,第二个放入变量$2,以此类推。$0表示整条记录。字段分隔符可以通过选项-F指定,否则使用默认分隔符。
步骤4:
把当前输入记录依次与每一个语句中pattern比较:如果匹配,就执行对应的actions;如果不匹配,就跳过对应的actions,直到完成所有的语句。
步骤5:
当一条输入记录处理完毕后,awk读取输入的下一行,重复处理直到所有输入处理完毕。
步骤6:
如果输入是文件列表,按顺序处理列表中的每个文件。
步骤7:
处理完所有输入后,若存在END,则执行相应的actions。
awk常用的内置变量
NF 当前记录中的字段数
NR 当前记录数
FS 字段分隔符(默认是空格)
RS 记录分隔符(默认是一个换行符)
OFS 输出字段分隔符
ORS 输出记录分隔符
IGNORECASE 如果为真,则进行忽略大小写的匹配