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指定需要排序的列

参数是指定待排序文件列表