awk工具
强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
awk [选项参数] ‘pattern1{action1}’ filename
- pattern:表示awk在数据中查找的内容
- action:找到匹配内容时执行命令
选项参数 | 功能 |
---|
-F | 指定输入文件分隔符 |
-v | 赋值一个用户定义变量 |
举个栗子
数据准备的是/etc/passwd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [root@b09ed0cc2c9d opt]# cat passwd 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 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin
|
搜素passwd文件以root关键字开头的所有航,并输出该行的第7列
1 2 3
| [root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $7}' passwd /bin/bash [root@b09ed0cc2c9d opt]#
|
搜素passwd文件以root关键字开头的所有航,并输出该行的第1列和第7列,输出时以逗号分隔
1 2
| [root@b09ed0cc2c9d opt]# awk -F : '/^root/{print $1","$7}' passwd root,/bin/bash
|
只显示/etc/passwd的第一列和第7列,以逗号分隔,且在所有航前面添加列名 user,shell在最后一行添加 ddd, /bin/zuishuai
1
| [root@b09ed0cc2c9d opt]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "ddd,bin/zuishuai"}' passwd
|
注意:BEGIN 在所有数据读取行之前执行; END 在所有数据执行之后执行将passwd 文件中的用户id增加数值1并输出
1
| [root@b09ed0cc2c9d opt]# awk -F : -v i=1 '{print $3+i}' passwd
|
内置变量
变量 | 说明 |
---|
filename | 文件名 |
nr | 已读的记录数 |
nf | 浏览记录的域的个数 |
举个栗子
数据准备
1 2 3 4 5 6 7
| [root@b09ed0cc2c9d opt]# cat sed.txt dong shen guan zhen wo wo lai lai
le le
|
统计passwd文件名,每行的行号,每列的列数
1
| [root@b09ed0cc2c9d opt]# awk -F : '{print FILENAME "," NR "," NF}' passwd
|
打印空行所在的行号
1
| awk '/^$/ {print NR}' sed.txt
|
sort工具
文件排序
sort(选项)(参数)
选项 | 说明 |
---|
-n | 按照数值大小排序 |
-r | 以相反的顺序排序 |
-t | 设置排序使用的分隔字符 |
-k | 指定需要排序的列 |
参数是指定待排序文件列表