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