2018.4.27 六周第三次课 (awk工具)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.4.27 六周第三次课 (awk工具)相关的知识,希望对你有一定的参考价值。
awk工具介绍
awk也是流行的编辑器,针对文档中的行来操作,一行一行的操作;
awk具备sed的所有功能,而且更强大。
awk截取文档中的某个段落,示例如下:
- -F选项的作用是指定分隔符,如果不加-F选项,以空格或者tab为分隔符。
- print为打印的动作,用来打印某个字段。$1为第一段,$2为第二段,$0表示整行。
-
- 示例1:
[[email protected] ~]# mkdir awk #创建个awk目录
[[email protected] ~]# cp /etc/passwd awk/test.txt #拷贝个文件过来并且修改名字
[[email protected] ~]# cd awk/
[[email protected] awk]# ls
test.txt
[[email protected] awk]# awk -F ‘:‘ ‘{print $1}‘ test.txt #打印出来第一段,分隔符为冒号“:”
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
- 示例1:
-
- 示例2,打印出来所有的内容:$0
[[email protected] awk]# awk ‘{print $0}‘ test.txt #$0表示整行,所有。
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
- 示例2,打印出来所有的内容:$0
匹配字符或者字符串
-
打印出来包含oo的行。
[[email protected] awk]# awk ‘/oo/‘ test.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin -
打印第一行的第一段包含oo的行。
[[email protected] awk]# awk -F ‘:‘ ‘$1 ~ /oo/‘ test.txt
root:x:0:0:root:/root:/bin/bash - 多次打印,多次匹配test,示例如下:
[[email protected] awk]# awk -F ‘:‘ ‘/root/ {print $1,$3} /bash/ {print $1,$3,$7}‘ test.txt
root 0
root 0 /bin/bash
operator 11
#这命令的意思是 第一和第三段,包含root的字符,和第一段 第三段 第七段包含bash的字符打印出来。
条件操作符
awk中可以用逻辑符号进行判断,比如==就是等于,也可以理解为精确匹配;
另外还有>、>=、<等,在和数字比较时,
若把比较的数字用双引号因起来,那么awk不会认为是数字,
而会认为是字符,不加双引号则会认为是数字。
-
示例1,精确匹配:
[[email protected] awk]# awk -F ‘:‘ ‘$3=="0"‘ test.txt #数字0
root:x:0:0:root:/root:/bin/bash -
示例2,列出来第三段大于等于500的行打印出来
[[email protected] awk]# awk -F ‘:‘ ‘$3>=500‘ test.txt
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin -
示例3,!=表示不匹配,第七段不等于/sbin/nologin的有哪些,如下:
[[email protected] awk]# awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ test.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt -
可以使用&&和||,他们分别表示并且和或者,用法如下:
[[email protected] awk]# awk -F ‘:‘ ‘$3<$4‘ test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin - ||或者的用法如下:
[[email protected] awk]# awk -F ‘:‘ ‘$3>100 || $7=="/sbin/nologin"‘ test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
awk的内置变量
awk常用的变量有OFS,NF和NR,OFS和-F选项有类似的功能;
也是用来定义分隔符的,但是它实在输出的时候定义;
NF表示用分割符分割后一共有多少段;
NR表示行号。
OFS的用法如下:
以上是关于2018.4.27 六周第三次课 (awk工具)的主要内容,如果未能解决你的问题,请参考以下文章