awk报告生成器(重要)
1.awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行最一些总结性质的工作,在命令格式上分别体现如下:
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令
END{}:处理完最后一行文本后执行,一般用来输出处理结果
2.awk基本用法
linux上面默认使用gawk
awk ‘{print FILENAME}’ passwd
awk ‘{print 第"NR"行,有“NF”列}’
awk ‘BEGIM{print NAME}’
awk ‘END{print WESTOS}’
awk -F : ‘BEGIN{print NAME}{printKaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲END{WESTOS}' aw…/’
awk -F : '/bash$/{print$1}'
实验1:
<1>前提条件:
[root@localhost mnt]# cp /etc/passwd .
[root@localhost mnt]# vim passwd ##适当减少了内容,为了结果更加直观
<2>初始化操作,使其在最先开始的时候输入“hello”
[root@localhost mnt]# awk -F : 'BEGIN{print "hello"}'
<3>输出passwd文件中的每一行的第一个字符,且在最先开始的时候输出“hello”,在在结束的时候输出“end”
[root@localhost mnt]# awk -F : 'BEGIN{print "hello"}{print $1}END{print"end"}' passwd
<4>输出文件名(因为每一行的文件名都是passwd,所以每行都输出passwd)
[root@localhost mnt]# awk -F : '{print FILENAME}' passwd
<5>输出passwd文件每一行的行号
[root@localhost mnt]# awk -F : '{print NR}' passwd
<6>输出passwd文件每一行的列数
[root@localhost mnt]# awk -F : '{print NF}' passwd
<7>输出passwd文件中每一行的第一列内容
[root@localhost mnt]# awk -F : '{print $1}' passwd
<8>输出passwd文件中以bash结尾的行,并只输出该行的第一列内容
[root@localhost mnt]# awk -F : '/bash$/{print $1}' passwd
<9>输出passwd文件中不以bash结尾的行,并只输出该行的第一列内容
[root@localhost mnt]# awk -F : '!/bash$/{print $1}' passwd
<10>练习:
输出passwd文件中用户可以登陆成功的个数
[root@localhost mnt]# awk 'BEGIN{N=0}/bash$/{N++}END{print N}' passwd
注意:
1.如果不写空格符,默认的是空格
2.指定分隔符后的第一段$1,第二段$2
3.awk是逐行处理,每一行处理一次
4.不加引号,默认的的是执行的动作
5.-F :表示每行的内容以“:”为分隔符
实验2:
<1>当N=100时,N+50=?
[root@desktop mnt]# awk 'BEGIN{N=100;print N+50}'
<2>输出passwd文件中每行中有a-d中任意一个字符的行
[root@desktop mnt]# awk '/[a-d]/{print}' passwd
<3>输出passwd文件中以a-d中任意一个字符开头的行
[root@desktop mnt]# awk '/^[a-d]/{print}' passwd
<4>输出passwd文件中除了a-d中任意一个字符开头的行
[root@desktop mnt]# awk '!/^[a-d]/{print}' passwd
<5>输出passwd文件中除了a-d中任意一个字符开头的行
[root@desktop mnt]# awk '/^[^a-d]/{print}' passwd
<6>输出passwd文件中不以a-d中任意一个字符开头的行
[root@desktop mnt]# awk '/^[!a-d]/{print}' passwd
<7>输出passwd文件中以a-d中任意一个字符开头的行
[root@desktop mnt]# awk '/^a|bash$/{print}' passwd
<8>输出passwd文件中以a字符开头和或者以bash结尾的行
[root@desktop mnt]# awk '!/^a|bash$/{print}' passwd
<9>输出passwd文件中第六列是bin结尾的行
[root@desktop mnt]# awk -F : '$6~/\<bin$/' passwd
<10>输出passwd文件中第六列不是bin结尾的行
[root@desktop mnt]# awk -F : '$6!~/\<bin$/' passwd