awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。
awk语法格式:
awk 命令 '{执行语句}' 文件名
awk 命令 '/正则/{执行语句}' 文件名
awk常用命令:
-F: 指定分隔符。不写就是以一个或多个空格为分隔符。
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
读前处理和读后处理。
BEGIN语句块: 在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
END语句块: 在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
awk内置变量:
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
NF 表示字段数,在执行过程中对应于当前的字段数。
NR 表示记录数,在执行过程中对应于当前的行号。
awk运算和判断。
+ - 加,减
* / & 乘,除与求余
+ - 一元加,减
^ *** 求幂
++ -- 增加或减少,作为前缀或后缀
= += -= 赋值语句
|| 逻辑或
&& 逻辑与
! 逻辑非
< <= > >= != == 关系运算符
awk小例子:
1、
test文件内容为:
root:123:234:345:666
#awd -F: {print $1,$3} test
root 234
表示:以:分割,$1表示分割后的第一部分,同理$3表示第三部分。
2、
#awk -F: 'NR==1{print $1,NR}' test
root 1
NR==1表示只定位第一行,后面输出语句,输出第一部分和行数。
3、
读前处理:
#awk -F: 'BEGIN {print NR,NF}' /etc/passwd
0 0
读后处理:
#awk -F: 'END {print NR,NF}' /etc/passwd
46 7