一.概述
1.awk是一种强大的文本处理工具,是Linux和Unix环境中现有的功能最强大的数据处理引擎之一;
2.awk提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至内置的变量和函数;
3.允许创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表等功能;
二.基本用法
1.普通模式
awk '/pattern/{action}' files
其中pattern是正则表达式,action是一系列命令,对于满足匹配条件的文本执行动作,files表示待操作的文件,如果不指定,输入为STDIN,如果不指定pattern,则每一行都执行一次action;
2.表达式模式
awk '(expression){action}' files
其中expression为表达式,当满足表达式时执行之后的action;
3.BEGIN和END
awk 'BEGIN{action} /pattern/{action} END{action}' files
BEGIN和END并不参与文本行的处理,分别在执行action前后做些基本操作,比如初始化,定义变量,输出结果格式化等等;
4.内置变量
ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME AWK浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,相当于-F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符
5.比较操作
< 小于 > 大于 <= 小于等于 >= 大于等于 == 等于 value ~ /pattern/ 值匹配正则表达式pattern value !~ /pattern/ 值不匹配正则表达式pattern
6.复合表达式1)可用&&,||连接多个表达式,进行“与”,“或”逻辑运算;
2)next命令:如果满足条件1,在之后的条件中都忽略,例如:
[root@localhost]# head -n 5 /etc/passwd | awk /^root/'{print $0 "*****";} {print $0}'
root:x:0:0:root:/root:/bin/bash*****
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
You have mail in /var/spool/mail/root
[root@localhost]# head -n 5 /etc/passwd | awk /^root/'{print $0 "*****";next} {print $0}'
root:x:0:0:root:/root:/bin/bash*****
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7.流控制
1)if语句
awk ‘
if (expression1) {
action1
} else if (expression2) {
action2
} else {
action3
}’
[root@localhost]# cat /etc/passwd | awk -F : '{if($1~/root/) print $0}'
root:x:0:0:root:/root:/bin/bash
2)while语句
awk '
while(condition)
{
action
}'
3)for语句
awk ‘
for (variable assignment;codndition;iteration process)
{
action
}’
8.更多功能:http://www.gnu.org/software/gawk/manual/gawk.html