5.shell脚本中常用命令(3)-awk报告生成器

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显示该文件行数
统计/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}

``在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值