Shell中的AWK

目录

1.awk的工作原理

2.awk的命令格式

3.awk基础命令

3.1过滤出包含指定内容的行

3.2  -F,指定分隔符,取列

3.3  BEGIN

3.4  END

3.5  文件导入,打印内容

3.6  “计算机”

3.7  awk取磁盘量

3.8  awk取IP地址

4. awk 常见的内置变量

4.1  FS

4.2  OFS

4.3  RS

4.4  NF

4.5  NR

4.6 找普通用户

4.7  FNR

5.自定义变量

6.模式匹配

7.找到10:00 到 11:00之间的日志

8.关系表达式

8.1  0为假;1为真

8.2  n++

8.3  !0

8.4  i=!i

8.5 !(i=!i)

9.条件判断

if条件判断

10.  for  

11.访问、赋值数值元素

12.遍历数组

13.小案例

1.  awk  '!line[$0]++'  test

2.  用for循环,打印端口号信息

3.  提取下面的字段中的 IP地址和时间

4.  提取host.txt主机名后再放回host.txt文件

5.  统计/etc/fstab文件中每个文件系统类型出现的次数

6.  统计/etc/fstab文件中每个真单词出现的次数

7.  提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

8.  查出/tmp/的权限,以数字方式显示

9.  查出用户UID最大值的用户名、UID及shell类型


1.awk的工作原理

  • 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
  • awk倾向于将一行分成多个"字段"然后再进行处理。
  • awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
  • 使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"|"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

2.awk的命令格式

  1. awk 选项 '模式或条件 {操作}' 文件1 文件2 ....
  2. 或者
  3. awk -f 脚本文件 文件1 文件2 .....

  • 第一步:执行BEGIN{action;… }语句块中的语句
  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,
  • 从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  • 第三步:当读至输入流末尾时,执行END{action;…}语句块
  • BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
  • END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
  • pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块 

3.awk基础命令

3.1过滤出包含指定内容的行

3.2  -F,指定分隔符,取列

3.3  BEGIN

3.4  END

3.5  文件导入,打印内容

3.6  “计算机”

3.7  awk取磁盘量

3.8  awk取IP地址

4. awk 常见的内置变量

awk 选项 '模式{print }'

  • FS :指定每行文本的字段分隔符,缺省默认为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"

  • OFS:输出时的分隔符

  • NF:当前处理的行的字段个数

  • NR:当前处理的行的行号(序数)

  • $0:当前处理的行的整行内容

  • $n:当前处理行的第n个字段(第n列)

  • FILENAME:被处理的文件名

  • RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

-v:定义变量  awk  中的变量

-F:指定分隔符

4.1  FS

4.2  OFS

4.3  RS

4.4  NF

4.5  NR

4.6 找普通用户

4.7  FNR

5.自定义变量

printf   
%s:显示字符串
%d, %i:显示十进制整数
%f:显示为浮点数
%e, %E:显示科学计数法数值 
%c:显示字符的ASCII码
%g, %G:以科学计数法或浮点形式显示数值
%u:无符号整数
%%:显示%自身

##############做成一个表格###########################

awk -F:   'BEGIN{printf "--------------------------------\n%-20s|%10s|\n--------------------------------\n","username","uid"}{printf "%-20s|%10d|\n--------------------------------\n",$1,$3}' /etc/passwd

6.模式匹配

awk '模式{处理动作}'

PATTERN:根据pattern条件,过滤匹配的行,再做处

7.找到10:00 到 11:00之间的日志

awk      '/10/,/11/'        文件名

sed      -nr    '/10/,/11/p'        文件名

8.关系表达式

  • 关系表达式结果为“真”才会被处理
  • 真:结果为非0值,非空字符串
  • 假:结果为空字符串或0值

8.1  0为假;1为真

8.2  n++

8.3  !0

8.4  i=!i

8.5 !(i=!i)

9.条件判断

  • if语句:awk的if语句也分为单分支、双分支和多分支
  • 单分支为if(判断条件){执行语句}
  • 双分支为if(判断条件){执行语句}else{执行语句}
  • 多分支为if(判断条件){执行语句}else if(判断条件){执行语句}else if(判断条件){执行语句}else if(判断条件){执行语句 

if条件判断

10.  for  

11.访问、赋值数值元素

12.遍历数组

13.小案例

1.  awk  '!line[$0]++'  test

2.  用for循环,打印端口号信息

ss -natp| awk 'NR!=1{print  $1}'  | sort |uniq  -c

ss -natp | awk  'NR!=1{a[$1]++}END{for(i in a)print  i,a[i]}'

3.  提取下面的字段中的 IP地址和时间

58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1"""sendfileo
 

4.  提取host.txt主机名后再放回host.txt文件

1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com

5.  统计/etc/fstab文件中每个文件系统类型出现的次数

6.  统计/etc/fstab文件中每个真单词出现的次数

7.  提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

8.  查出/tmp/的权限,以数字方式显示

9.  查出用户UID最大值的用户名、UID及shell类型

  • 43
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值