AWK 是一种用于处理文本的编程语言工具。
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
特殊字段:
BEGIN语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
分隔符默认是空格,可以用-F, 改变成逗号为分隔符 -F, 或改成冒号 -F:
安装软件:
[root@xuegod63 tmp]# rpm -qf `which awk`
gawk-3.1.7-6.el6.x86_64
[root@xuegod63 tmp]# rpm -qf `which sed`
sed-4.2.1-7.el6.x86_64
例子:
1.自定义年月日的显示方式:
Year:2015 month:Feb days:11
例:
[root@xuegod63 tmp]# date | awk '{print "Year:"$6 "\t month:"$2 "\t days:"$3}'
Year:2015 month:Feb days:11
准备要显示的内容:
#vim result.txt
andy 4 85 92 78 94 88
bob 6 89 90 75 90 86
claire 9 84 88 80 92 84
dave 5 94 52 84 86 NA
2.显示所有内容:
#awk '{print $0}' result.txt
3、显示第一行,以:作为分隔符
[root@xuegod63 tmp]# awk -F: '{ print $1 }' /etc/passwd
3.显示第一列和第三列的内容。
[root@xuegod63 tmp]# awk '{print $1,$3}' result.txt
andy 85
bob 89
claire 84
dave 94
4.打印一个文件头,打印一个文件尾
特殊字段:
BEGIN语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
[root@xuegod63 tmp]# awk 'BEGIN {print "name level result\n"} {print $1,$2,$3} END{ print "end of class1 results"}' result.txt
name level result
andy 4 85
bob 6 89
claire 9 84
dave 5 94
end of class1 results
第二列大于等于5的那些记录
[root@xuegod63 tmp]# awk '$2 >= 5 {print $0}' result.txt
bob 6 89 90 75 90 86
claire 9 84 88 80 92 84
dave 5 94 52 84 86 NA
显示用户名为andy或(和)第二列为9的记录
[root@xuegod63 tmp]# awk '{ if($1 == "andy" || $2=="9") print $0 }' result.txt
[root@xuegod63 tmp]# awk '{ if($1 == "andy" && $2=="9") print $0 }' result.txt