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@shell_example ~]# cd /mnt/
[root@shell_example mnt]# ls
[root@shell_example mnt]# cp /etc/passwd .
[root@shell_example mnt]# vim passwd
2.初始化操作,使其在最先开始的时候输入“hello”
[root@shell_example mnt]# awk -F : 'BEGIN{print "hello"}'
3.输出passwd文件中每一行的第一个字符,并且在最开始的时候输出“hello”,在结束的时候输出“end”
[root@shell_example mnt]# awk -F : 'BEGIN{print "hello"}{print $1}END{print"end"}' passwd
4.输出文件名
[root@shell_example mnt]# awk -F : '{print FILENAME}' passwd
5.输出passwd文件的行号
[root@shell_example mnt]# awk -F : '{print NR}' passwd
6.输出passwd文件的列数
[root@shell_example mnt]# awk -F : '{print NF}' passwd
7.输出passwd文件中每一行的第一列内容
[root@shell_example mnt]# awk -F : '{print $1}' passwd
8.输出passwd文件中以bash结尾的行,并只输出该行的第一列内容
[root@shell_example mnt]# awk -F : '/bash$/{print $1}' passwd
9.输出passwd文件中不以bash结尾的行,并只输出该行的第一列内容
[root@shell_example mnt]# awk -F : '!/bash$/{print $1}' passwd
练习:输出passwd文件中用户可以登陆成功的个数
[root@shell_example mnt]# awk 'BEGIN{N=0}/bash$/{N++}END{print N}' passwd
注意:1.如果不写空格符,默认的是空格
2.awk是逐行处理,每一行处理一次
3.不加引号,默认的的是执行的动作
- 实验2
1.当N=100时,N+50=?
[root@shell_example mnt]# awk 'BEGIN{N=100;print N+50}'
2.输出passwd文件中每行有a-d中任意一个字符的行
[root@shell_example mnt]# awk '/[a-d]/{print}' passwd
3.输出passwd文件中以a-d中任意一个字符开头的行
[root@shell_example mnt]# awk '/^[a-d]/{print}' passwd
4.输出passwd文件中不以a-d中任意一个字符开头的行
[root@shell_example mnt]# awk '!/^[a-d]/{print}' passwd
5.输出passwd文件中不以a-d中任意一个字符开头的行
[root@shell_example mnt]# awk '/^[^a-d]/{print}' passwd
6.输出passwd文件中以a-d中任意一个字符开头的行
[root@shell_example mnt]# awk '/^[!a-d]/{print}' passwd
7.输出passwd文件中以a字符开头或以bash结尾的行
[root@shell_example mnt]# awk '/^a|bash$/{print}' passwd
8.输出passwd文件中不以a字符开头和不以bash结尾的行
[root@shell_example mnt]# awk '!/^a|bash$/{print}' passwd
9.输出passwd文件中第六列是bin结尾的行
[root@shell_example mnt]# awk -F : '$6~/\<bin$/' passwd
10.输出passwd文件中第六列不是bin结尾的行
[root@shell_example mnt]# awk -F : '$6!~/\<bin$/' passwd