AWK 是一种处理文本文件的语言,是一个强大的文本分析工具
基本用法
awk [选项参数] ‘pattern1{action1} pattern{action2}’ filename
pattern :表示AWK在数据中查找的内容:匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数说明
-F:指定输入文件拆分隔符
-v:赋值一个用户定义变量
案例实操
(0)数据准备
[zhang@hadoop102 data]$ sudo cp /etc/passwd ./
复制完毕之后,查看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
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
gluster:x:996:993:GlusterFS daemons:/var/run/gluster:/sbin/nologin
saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
unbound:x:993:988:Unbound DNS resolver:/etc/unbound:/sbin/nologin
chrony:x:992:987::/var/lib/chrony:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:991:985:User for geoclue:/var/lib/geoclue:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sssd:x:990:984:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
(1)需求:搜索passwd文件以root关键字开头的所有行,并输出该行的第七列
查看上面的文件可知,第一行的是以root为开头的行
[zhang@hadoop102 data]$ awk -F: '/^root/{print $7}' passwd
其中,-F : 以:进行切割, ’ ':代表正则匹配, /^ :代表开头,/^ root:代表以root为开头,print进行打印,$7:代表的是第七列.
输出结果为 :
/bin/bash
(2)搜索passwd文件以root关键字开头的所有航,并输出改行的第1列和第7列,中间以","分割
[zhang@hadoop102 data]$ awk -F: '/^root/{print $1","$7}' passwd
输出:
root,/bin/bash
(3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai".
[zhang@hadoop102 data]$ awk -F: 'BEGIN{"user,shell"} {print $1","$7} END{print "dahaige,/bin/zuishuai"}' passwd
其中,BEGIN在所有数据赌气之前执行;END在所有数据执行之后执行
输出:
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
sync,/bin/sync
shutdown,/sbin/shutdown
halt,/sbin/halt
mail,/sbin/nologin
operator,/sbin/nologin
games,/sbin/nologin
ftp,/sbin/nologin
nobody,/sbin/nologin
systemd-network,/sbin/nologin
dbus,/sbin/nologin
polkitd,/sbin/nologin
libstoragemgmt,/sbin/nologin
rpc,/sbin/nologin
colord,/sbin/nologin
gluster,/sbin/nologin
saslauth,/sbin/nologin
abrt,/sbin/nologin
setroubleshoot,/sbin/nologin
rtkit,/sbin/nologin
pulse,/sbin/nologin
rpcuser,/sbin/nologin
nfsnobody,/sbin/nologin
unbound,/sbin/nologin
chrony,/sbin/nologin
qemu,/sbin/nologin
radvd,/sbin/nologin
tss,/sbin/nologin
usbmuxd,/sbin/nologin
geoclue,/sbin/nologin
ntp,/sbin/nologin
sssd,/sbin/nologin
gdm,/sbin/nologin
gnome-initial-setup,/sbin/nologin
sshd,/sbin/nologin
avahi,/sbin/nologin
postfix,/sbin/nologin
tcpdump,/sbin/nologin
zhang,/bin/bash
mysql,/bin/false
dahaige,/bin/zuishuai
(4)将passwd文件中的用户id增加数值1并输出:
[zhang@hadoop102 data]$ awk -F: -v i=1 '{print $3+i}' passwd
-v 代表定义一个变量,$3取第三列,第三列是id
输出:
1
2
3
4
5
6
7
8
9
12
13
15
100
193
82
1000
999
33
998
997
996
174
995
173
172
30
65535
994
993
108
76
60
114
992
39
991
43
990
75
71
90
73
1001
28
(5)切割出ip地址:
[zhang@hadoop102 data]$ ifconfig ens33|grep "inet " |awk -F " " '{print $2}'
通过ifconfig ens33:输出ens33配置的信息,里面包含ip地址,
grep "inet ":查找包含"inet “的行信息,
awk -F " " ‘print $2’ :以” "切割,$2,取第二列.
输出IP地址.鉴于隐私,IP地址就不贴出来了.