您的位置:首页 > 运维架构 > Shell

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

2019-08-18 17:18 851 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/sheena_/article/details/99705068

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

wc -l /etc/passwd
显示该文件行数

命令 说明
awk 'BEGIN{n=0}{n++}END{print n}' /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}

``

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: