1.awk报告生成器
AWK是一个优良的文本处理工具(处理文本的编程语言工具),Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )
在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是:只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
命令是逐一处理文本的
2.awk基本命令
linux上默认使用gawk,命令是逐一处理文本
的
命令 | 说明 |
---|
awk '{print FILENAME}' passwd | 输出文件名(文件中的内容有多少行就打印多少次) |
cat -b passwd
查看到文件内容并显示行数
命令 | 说明 |
---|
awk '{print NR}' passwd | 输出文本行数 |
awk -F : '{print NF}' passwd | 以:为分隔符,输出文本列数 |
命令 | 说明 |
---|
awk -F : 'BEGIN{print "NAME"}{print $1}END{print "END"}' passwd | 以:为分隔符输出文本第1列,并在开始输出“NAME”,在结尾输出“END”字符 |
awk -F : 'BEGIN{print "NAME"}{print $1,$5}END{print "END"}' passwd | 以:为分隔符打印文本第1列和和第5列,并在开始输出“NAME”,在结尾输出“END”字符 |
awk -F : 'BEGIN{print "NAME"}{print $0}END{print "END"}' passwd | 以:为分隔符输出文本全部列,并在开始输出“NAME”,在结尾输出“END”字符 |
awk -F : 'BEGIN{print "NAME"}{print $1="";print $0}END{print "END"}' passwd | 以:为分隔符打印文本的2-7列($1=""第一列为空),并在开始输出“NAME”,在结尾输出“END”字符 |
命令 | 说明 |
---|
awk '/bash$/{print}' passwd | 输出以bash结尾的文本内容 |
awk '!/bash$/{print}' passwd | 输出不以bash结尾的文本内容 |
awk '!/bash$ /&&!/nologin$ /{print}' passwd | 输出不以bash结尾且不以nologin结尾的文本内容 |
awk '/bash$/||/nologin$/{print}' passwd | 输出以bash结尾或以nologin结尾的文本内容 |
命令 | 说明 |
---|
awk 'BEGIN{n=0}/nologin$/{n++}END{print n}' passwd | 统计文本以nologin结尾的行数(n为变量,初始值为0,符合‘以nologin为结尾‘的要求,则n+1,最终输出n的值) |
awk '/nologin$/{print}' passwd
命令 | 说明 |
---|
awk 'BEGIN{n=0}{n++}END{print n}' /etc/passwd | 统计文本内容行数 |
wc -l /etc/passwd
显示该文件行数
命令 | 说明 |
---|
awk '/^r/{print}' passwd | 输出文本中以r开头的内容 |
awk '/^[a-f]/{print}' passwd | 输出文本中以a/b/c/d/f开头的内容 |
命令 | 说明 |
---|
awk -F : '$6~/bin/{print}' passwd | 以:为分隔符,输出第6列有‘bin‘的文本内容 |
awk -F : '$6~/\<bin/{print}' passwd | 以:为分隔符,输出第6列是‘bin‘的文本内容 |
awk -F : '$6!~/\<bin/{print}' passwd | 以:为分隔符,输出第6列不是‘bin‘的文本内容 |
3.测试
(1)输出能登陆系统的用户名称
awk -F : 'BEGIN{print "NAME"}/bash$/||/sh$/||/tcsh$/||/csh$/{print $1}' /etc/passwd
(2)输出能登陆系统但家目录不在/home的用户个数
awk -F : 'BEGIN{n=0}(/bash$/||/sh$/||/tcsh$/||/csh$/)&&$6!~/^\/home/{print;n++}END{print n}' /etc/passwd
(3)抓取eth0网卡的ip
ifconfig eth0 | awk '/inet\>/{print $2}
``