目录

一、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基础语法

创造者:Aho、Weinberger、Kernighan
基于模式匹配检查输入文本,逐行处理并输出
通常用在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
1

五、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

Linux之awk命令相关推荐

  1. linux bin命令解释,Linux:“awk”命令的妙用

    原标题:Linux:"awk"命令的妙用 导读awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理 ...

  2. linux之awk命令学习笔记

    Linux之awk命令学习笔记 前言 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, ...

  3. linux中awk命令_Linux / Unix中的AWK命令

    linux中awk命令 AWK is suitable for pattern search and processing. The script runs to search one or more ...

  4. linux之awk命令格式化输出(printf)使用技巧

    linux之awk命令格式化输出(printf)使用技巧 在使用awk命令的过程中输出的每一列总是对不齐,看着很乱,如下: [root@linuxforliuhj ~]# awk -F ": ...

  5. Linux的awk命令使用心得

    awk 'BEGIN{RS="<!--|-->"}NR%2' (linux用awk来读取xml文件时,会将注释也读取进来.所以将这个注释标记为行分割符) BEGIN和E ...

  6. linux下awk命令详解,Linux文件处理awk命令-linux awk命令详解-嗨客网

    Linux文件处理awk命令详解教程 Linux awk命令说明 awk 是一个强大的文本分析工具,相对于 awk 有 3 个不同版本: awk.nawk 和 gawk,未作特别说明,一般指 gawk ...

  7. Linux下awk命令简介

    转载自:http://www.zsythink.net/archives/1336/ 初识awk 我们先来用专业的术语描述一下awk是什么,如果你看不懂,没关系,我们会再用"大白话" ...

  8. linux中awk命令是什么,Linux awk命令详解

    awk 是除了 sed 命令之外,Linux 系统中另一个功能比较强大的数据处理工具. 和 sed 命令类似,awk 命令也是逐行扫描文件(从第一行到最后一行),寻找含有目标文本的行,如果匹配成功,则 ...

  9. linux之awk命令解读

    之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符.AWK 是一种处理文本文件 ...

  10. 每天学一点儿shell:Linux三剑客——awk命令

    文章目录 awk的命令格式 命令格式 常用命令选项 awk内置命令 awk的用法实例 获取内容的第2列 获取每一行的行数 内置函数 算数函数 字符串内置函数 时间内置函数 awk的命令格式 命令格式 ...

最新文章

  1. c语言程序设计01,c语言程序设计01.doc
  2. 学习Windows2008——设计活动目录
  3. ph获取xml文件信息
  4. 3Mysql 的常用操作
  5. webview跟html通信的原理,1.iOS: webView与html的交互
  6. 7-34 红色警报 (10 分)(结构体并查集)
  7. 信息安全密码学期末复习重点总结
  8. HTML中怎么点击超链接让新页面在另一个窗口打开?
  9. U盘数据恢复工具哪个好?
  10. 普特南数学竞赛的经验
  11. Kindle DXG的一些使用方法及技巧
  12. 洛谷 U19159 采摘毒瘤
  13. python程序设计搜题软件下载_智慧职教APPPython程序设计答案搜题公众号
  14. PHP实现文件上传功能实例代码
  15. GeoServer结合FWTools切片工具发布影像金字塔切片
  16. android硬解码x265,Android 设置硬解码 h265 失败
  17. oracle pl sql面试题,Oracle 面试题库—PL/SQL
  18. 【树莓派C语言开发】实验03:七彩LED模块
  19. android 人脸检测 对焦,Android API教程:人脸检测(上)
  20. 手机文件夹与电脑文件夹实时同步

热门文章

  1. 马德里烈风和java的鱼雷,碧蓝航线航母舰载机怎么搭配_碧蓝航线航母舰载机搭配思路及优缺点详解_手心游戏...
  2. QQ堂3.3可用外挂
  3. EOS调用Json-RPC接口
  4. 原生JDBC连接数据库
  5. github pages Jekyll环境搭建
  6. 如何实现图片缩放效果?
  7. 转:成长,就是不断打破认知
  8. 中职学校新增计算机专业申请书,中职学校新增专业设置申请书
  9. 想让公司承担孕 产期工资 老子解雇你 --咱们一起 骂 老板 2
  10. 根域名、顶级域名、二级域名_找到出售顶级域名的7个最佳地方(+专家提示)