Linux之awk命令

目录

一、awk基础语法

1.1 主要用法

1.2 awk内置变量

1.3 过滤时机

二、awk基础应用案例

三、awk条件判断

3.1 正则表达式

3.2 数值、字符比较

3.3 逻辑比较测试

3.4 运算符

四、awk流程控制

4.1 if语句

4.2 for循环

五、awk数组与应用案例

六、awk综合案例

6.1 ss命令

6.2 过滤连接状态

注:/etc/passwd内容


一、awk基础语法

创造者:AhoWeinbergerKernighan
基于模式匹配检查输入文本,逐行处理并输出
通常用在Shell
脚本中,获取指定的数据
单独用时,可对文本数据做统计

1.1 主要用法

格式1:前置命令 | awk  [选项]  '[条件]{指令}'
格式2
awk  [选项]  '[条件]{指令}'  文件.. ..

其中指令多条语句可以分号分割

其中$1,$3表示列数,相比grep只能对行过滤,-F可以指定分隔符,默认分隔符(空格或Tab)

xm@ubuntu:~/shell$ awk '{print $1,$3}' test.txt 
hello world
welcome Beijing
xm@ubuntu:~/shell$ awk -F: '{print $1,$3}' /etc/passwd
root 0
daemon 1
bin 2
sys 3
sync 4
games 5
man 6
lp 7
mail 8

1.2 awk内置变量

具有特殊含义,可以直接使用

变  量

用  途

FS

保存或设置字段分隔符,例如 FS= “:”,与-F功能一样

$n

指定分隔的第n个字段,如$1$3分别表示第1、第3

$0

当前读入的整行文本内容

NF

记录当前处理行的字段个数(列数)

NR

记录当前已读入行的数量(行数)

打印行数和列数

打印最后一列

xm@ubuntu:~/shell$ awk -F: '{print $NF}' /etc/passwd
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin 

1.3 过滤时机

在所有行前处理BEGIN{},读入第一行文本之前执行,一般用来初始化操作
逐行处理{},逐行读入文本执行相应的处理,是最常见的编辑指令块
在所有行后处理,END{},处理完最后一行文本之后执行,一般用来输出处理结果

xm@ubuntu:~/shell$ awk 'BEGIN {a=34;print a+12}'
46
xm@ubuntu:~/shell$ awk 'BEGIN{x=0}/bash$/{x++}END{print x}' /etc/passwd
2
xm@ubuntu:~/shell$ awk -F: 'BEGIN{print NR} END{print NR}' /etc/passwd
0
43

二、awk基础应用案例

过滤内存信息

 过滤磁盘信息

过滤CPU信息

过滤网卡信息

 监控暴力破解的IP地址

三、awk条件判断

输出部分行、限制输出行的数据内容、设置多条件
条件表达式:正则表达式、数值/字符比较、逻辑比较

3.1 正则表达式

加上双斜杆,其中~表示匹配,!~表示不匹配

一个是匹配以ro开头的,一个是第7列尾部不为bash的

3.2 数值、字符比较

== 等于、!= 不等于

> 大于、>= 大于或等于

< 小于、<= 小于或等于

一是打印行数为2的,二是打印第七列不为/bin/bash

3.3 逻辑比较测试

&&逻辑与,期望多个条件都成立,||逻辑或,只要有一个条件成立就满足

xm@ubuntu:~/shell$ awk -F: '$3>=0&&$3<2{print $1,$3}'   /etc/passwd
root 0
daemon 1
xm@ubuntu:~/shell$ awk -F: '$3==1||$3==7{print $1,$3}'  /etc/passwd
daemon 1
lp 7

3.4 运算符

+、-、*、/、% ++、-- 、+=、-=、*=、/=

xm@ubuntu:~/shell$ awk  'NR%2==1{print}'  /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
avahi-autoipd:x:106:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
dnsmasq:x:108:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
cups-pk-helper:x:110:116:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
whoopsie:x:112:117::/nonexistent:/bin/false
saned:x:114:119::/var/lib/saned:/usr/sbin/nologin
avahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
gnome-initial-setup:x:120:65534::/run/gnome-initial-setup/:/bin/false
xm:x:1000:1000:ubuntu18-04,,,:/home/xm:/bin/bash
mosquitto:x:123:127::/var/lib/mosquitto:/usr/sbin/nologin
xm@ubuntu:~/shell$ seq  200 | awk  'BEGIN{i=0} ($0%3==0)&&  \
> ($0%13==0){i++} END{print i}'
5

四、awk流程控制

4.1 if语句

单分支if判断

xm@ubuntu:~/shell$ seq  200 | awk  'BEGIN{i=0} ($0%3==0)&&  \
> ($0%13==0){i++} END{print i}'
5
xm@ubuntu:~/shell$ awk  -F:   '{if($3>=1000){i++}} END{print i}'   /etc/passwd
2
xm@ubuntu:~/shell$ awk -F: '{if($1=="root"){print $1,$3}}' /etc/passwd
root 0
xm@ubuntu:~/shell$ uptime | awk  '{ if($NF>0.01){print "CPUload:"$NF}}'
CPUload:0.03

双分支if判断

xm@ubuntu:~/shell$ awk  -F:  '{ if($3>=1000){i++} else{j++} }  \
> END{print  "普通用户:" i, "系统用户:" j }' /etc/passwd
普通用户:2 系统用户:41
xm@ubuntu:~/shell$ ls -l  /etc | awk  \
> '{ 
> if($1~/^-/) {x++}  else {y++}     \
> }                               \
> END {print "普通文件个数:"x,"目录个数:"y}'
普通文件个数:95 目录个数:137 

多分支if判断

xm@ubuntu:~/shell$ ls -l  /etc | awk  \
> '{ 
> if($1~/^-/) {x++}  else if ($1~/^d/) {y++} else{z++}    \
> }                               \
> END {print "普通文件个数:"x,"目录个数:"y, "其他个数:"z}'
普通文件个数:95 目录个数:130 其他个数:7 

4.2 for循环

xm@ubuntu:~/shell$ awk 'BEGIN{ for (i=1;i<=5;i++) {print i}}'
1
2
3
4
5
xm@ubuntu:~/shell$ awk 'BEGIN{ for (i=5;i>=1;i--) {print i}}'
5
4
3
2

五、awk数组与应用案例

定义数组,格式:数组名[下标]=元素值
调用数组,格式:数组名[下标]
遍历数组,格式:for(变量名 in 数组名){print 数组名[变量]}

xm@ubuntu:~/shell$ awk 'BEGIN {
name[0]="jim"; name[1]="tom" ;print name[1],name[0]
}'
tom jim
xm@ubuntu:~/shell$ awk 'BEGIN { age["tom"]=22; age["jim"]=18; \
>  print age["tom"],age["jim"]}'
22 18
xm@ubuntu:~/shell$ awk 'BEGIN{ x[0]=0;x[1]=1;x[2]=2;x[3]=3;  for(i in x){print x[i]}}'
0
1
2
3

案例,统计web访问日志

简化数据,统计每个IP访问的次数

 who命令可以查看登陆信息

六、awk综合案例

6.1 ss命令

6.2 过滤连接状态

注:/etc/passwd内容

xm@ubuntu:~/shell$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
uuidd:x:105:111::/run/uuidd:/usr/sbin/nologin
avahi-autoipd:x:106:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
usbmux:x:107:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
dnsmasq:x:108:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
rtkit:x:109:114:RealtimeKit,,,:/proc:/usr/sbin/nologin
cups-pk-helper:x:110:116:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
whoopsie:x:112:117::/nonexistent:/bin/false
kernoops:x:113:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
saned:x:114:119::/var/lib/saned:/usr/sbin/nologin
pulse:x:115:120:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
avahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
colord:x:117:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
geoclue:x:119:124::/var/lib/geoclue:/usr/sbin/nologin
gnome-initial-setup:x:120:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
xm:x:1000:1000:ubuntu18-04,,,:/home/xm:/bin/bash
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
mosquitto:x:123:127::/var/lib/mosquitto:/usr/sbin/nologin

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值