awk功能和sed类似,都是进行文本处理的,awk可以从文件或字符串中基于指定规则抽取信息。
1、awk编程模型
awk程序由一个主输入循环维持,主输入循环反复执行,直到终止事件被触发。
awk定义了两个特殊的字段:BEGIN和END,BEGIN用于在主输入循环之前执行,END用于在循环之后执行。
2、调用方法
awk [-F 域分界符] ‘awk程序段’ 输入文件
awk -f awk脚本文件 输入文件
./awk脚本文件 输入文件
3、实际例子
a) awk模式匹配
任何awk语句都有模式和动作组成。模式是一组用于测试输入行是否要执行动作的规则。
打印空白行
awk '/^$/{print "this is a blank line."}' input
b) 记录和域
分隔符
awk ‘{print $2,$1,$3,$3}‘ sturecord
awk '{print $0} sturecord
$1代表域
$0代表整体
awk 'BEGIN{one=1;two=2}{print $(one+two)}' struecord
-F选项改变分隔符
awk -F"\t" '{print $3}' struecord
FS改变分隔符
awk 'BEGIN {FS=','} {print $0}' sturecord
c) 关系和布尔运算符
~匹配正则表达式
!~不匹配正则表达式
!=不等于
==等于
awk 'BEGIN {FS=":"} $1~/root/' /etc/passwd 第一域匹配root
awk 'BEGIN {FS=":"} $0~/root/' /etc/passwd 全部域匹配root
awk 'BEGIN {FS=":"} $0!~/root/' /etc/passwd 全部域匹配root
awk 'BEGIN {FS=":"} {if($3<$4 print $0)}' /etc/passwd 全部域匹配root
d)表达式
awk '/^$/{print x++}' input 匹配空白行
e)环境变量
$n $0 ARGC ARGIND ARGV FILENAME FNR(浏览文件的记录数) FS NF NR(当前记录数)………………
f)格式化输出
printf 参考C语言
g)内置字符串函数
gsub替换
index(s,t) 返回s中字符串第一个个t的位置
length(s) 返回s长度
match(s,t)测试s是否包含匹配t的字符串
awk 'BEGIN {FS=":";OFS=":"} gsub (/root/,"gridsphere",$1) {print $0}' /etc/passwd
f)向awk脚本传递参数
awk 脚本 parameter=value 输入文件
'