awk语言最基本的功能是文件和字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。awk命令有三种模式分别为命令行模式,shell脚本模式和文本模式。
命令行模式:
awk [-F] '[awk命令]' [文件名]
文件的每一行由域分隔符分隔开的每一项称为域,[-F]分隔符默认为空格。
awk内置变量:
$1 即第一个域,即账户名
显示用户与对应的shell,用户与shell之间用Tab相隔,并在操作结束后输出字符串。
其中BEGIN语句在开始文件操作前执行,END在文件操作后执行位于两者之间的才是真正的awk命令
awk内置变量:
ARGC 命令行参数的个数
ARGV 命令行参数数组
ARGIND 当前被处理文件的ARGV标志符
NR 已经读出的记录数
FNR 当前文件的记录数
FS 输入字段分隔符,
OFS输出字段分隔符
NF:当前记录中的字段个数
RS:输入记录分隔符,
ORS:输出记录分隔符,
# cat /etc/passwd | awk -F ':' '{print $1}' #显示passwd中的用户
root
bin
daemon
adm
...
mysql
root:x:0:0:root:/root:/bin/bash
$1 即第一个域,即账户名
# head -n 10 /etc/passwd | awk -F ':' 'BEGIN{print "name shell:"} {print $1"\t"$7} END {print "gg is fly!"}'
name shell:
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
uucp /sbin/nologin
gg is fly!
显示用户与对应的shell,用户与shell之间用Tab相隔,并在操作结束后输出字符串。
其中BEGIN语句在开始文件操作前执行,END在文件操作后执行位于两者之间的才是真正的awk命令
shell脚本模式:
将awk命令插入文件使awk程序可执行然后awk命令解释器作为脚本首行,一般通过键入脚本名称来调用。#!/bin/awk
#!/bin/awk
if [ 'chkconfig --list | awk '$1="xfs" {print $5}' ` = "3:on" ] ; then echo ok ; fi
打印处于开启状态的服务
awk编程:
awk作为‘显示扫描和处理语言’,与其他语言相似,拥有变量的定义、条件语句、循环语句、以及数组。下面进行简单介绍(学习awk编程建议稍有点其他语言的编程基础)。
变量定义:
cat /etc/passwd|awk 'BEGIN{count=0} {count++;print $0} END{print "user count is:",count}' #统计账户总数
awk中除了内置变量外还可以自定义变量 count即自定义变量
条件语句:
chkconfig --list |awk 'BEGIN {i=0} { if ($5=="3:on") i+=1 }' END {print iii}
统计level5==3:on的服务有多少个, i=0 是定义变量
循环语句:
awk编程完整支持C语言循环语句
数组:
# cat /etc/passwd | awk -F ':' 'BEGIN{count=0} {name[count]=$1;count++;};END{for(i=0;i<NR;i++) print i ,name[i]}'
此处采用for循环遍历数组统计用户总数