Linux26期 7月5日预习笔记
9.6/9.7 awk
扩展
把这里面的所有练习题做一下
http://www.apelearn.com/study_v2/chapter14.html
awk工具的使用
awk 兼具sed的所有功能,而且更加强大。它也是针对文档的行来操作,一行一行地执行。
- 截取文档中的某个段
#head -n2 test.txt |awk -F ‘:’ ‘{print $1}’
本例中,-F选项的作用是指分隔符。如果不加-F选项,则以空格或者tab为分隔符。
Print为打印的动作,用来打印某个字段。
$1为第一个字段,$2为第二个字段,以此类推。
但$0比较特殊,它表示整行。
#head -n2 test.txt |awk -F’:’ ‘{print $0}’
注意awk的格式,-F后面紧跟单引号,单引号里面为分隔符。
Print的动作要用{ }括起来,否则会报错。Print还可以打印自定义的内容,但是自定义的内容要用双引号括起来,如下:
#head -n2 test.txt |awk -F ‘:’ ‘{print $1”#”$2”#”$3”#”$4}’
- 匹配字符或者字符串
#awk ‘/oo/’ test.txt
跟sed的用法类似,能实现grep的功能,但没有颜色显示,肯定没有grep用起来方便。不过awk还有比sed更强大的匹配。如下:
#awk -F ‘:’ ‘$1 ~/oo/’ test.txt
它可以让某个段去匹配,这里的~就是匹配的意思。Awk还可以多次匹配。如下:
#awk -F ‘:’ ‘/root/ {print $1,$3} /test/{print $1,$3}’ test.txt
本例中awk匹配完root,再匹配test,它还可以只打印所匹配的段。
- 条件操作符
#awk -F ‘:’ ‘$3==”0”’ /etc/passwd
Awk中可以用逻辑符号进行判断,比如==就是等于,也可以理解为精确匹配。
另外还有>,>=,<,<=,!=等。
注意:在和数字比较时,若把比较的数字用双引号引起来,那么awk不会认为是数字,而会认为是字符,不加双引号则会认为是数字。
#awk -F ‘:’ ‘$3>=”500”’ /etc/passwd
本例中,本想把uid大于等于500的行打印出来,但结果并不理想,因为awk把所有的数字当作字符了,就跟上一章提到的sort排序原理一样。但,不加双引号就得到了想要的结果。
# awk -F ‘:’ ‘$3>=500’ /etc/passwd
#awk -F ‘:’ ‘$7!=“/sbin/nologin”’ /etc/passwd
本例中,!=表示不匹配,它除了针对某一个段的字符进行逻辑比较外,还可以在两个段之间进行逻辑比较。如下:
#awk -F ‘:’ $3<$4’ /etc/passwd
另外还可以使用$$ 和 || ,它们分别表示“并且“和”或者“。
$$的用法如下:
#awk -F ‘:’ ‘$3>”5” $$ $3<”7”’ /etc/passwd
||的用法如下:
#awk -F ‘:’ ‘$3>1000 || $7==”/bin/bash”’ /etc/passwd
- awk的内置变量
awk 常用的变量有OFS, NF 和 NR ,OFS 和 -F选项有类似的功能,也是用来定义分隔符的,但是它是在输出的时候定义, NF 表示用分隔符分隔后一共有多少段,NR表示行号。
OFS的用法示例如下:
#head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'
还有一个更高级的用法:
变量NF的具体用法如下:
这里NF是多少段,$NF是最后一段的值。
变量NR的具体用法如下:
我们还可以使用NR作为判断条件,如下
NR也可以配合段匹配一起使用,如下
awk中的数学运算
awk也可以对各个段的值进行数学运算,如下:
awk还可以计算某个阶段的总和,示例如下
这里的END 是awk特有的语法,表示所有的行都已经执行。
转载于:https://my.oschina.net/u/3851620/blog/1841030
- 点赞
- 收藏
- 分享
- 文章举报
- Linux26期 7月10日预习笔记
- Linux26期 7月9日预习笔记
- Linux26期 7月11日预习笔记
- linux26期 7月6日学习笔记
- Linux进程管理预习笔记
- 第十章 Linux日常运维管理(上)预习笔记加课堂笔记
- 预习第一章 初识Linux 笔记
- 第七章Linux软件包安装和卸载预习笔记加课堂笔记
- Linux 笔记
- Linux下安装elk,简单测试;(笔记)
- linux操作远程文件拷贝、远程免密登陆、修改虚拟机主机名(课堂学习笔记)
- Linux入门实践笔记(二)——Jar包的运行与关闭
- 写得蛮好的linux学习笔记
- linux常用命令学习笔记
- Linux第二周学习笔记(10)
- Linux 程序设计学习笔记----进程管理与程序开发(下)
- Linux学习笔记总结--配置iptables防火墙
- Linux个人学习笔记(编辑中)
- Linux操作系统学习笔记之linux基本命令
- Linux笔记:vi常用命令