Awk工具使用介绍

2021年8月25日09:46:36 发表评论
摘要

【心语】用别人的智慧充实自己,不用别人的智慧贬低自己;用别人的成功激励自己,不用别人的成功折磨自己;用别人的错误提醒自己,不用别人的错误娱乐自己。

Awk是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一,Awk是一个行级文本高效处理工具,Awk经过改进生成的新的版本又Nawk、Gawk ,一般linux默认为Gawk,Gawk是AWK的GNU开源免费版本
Awk基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则继续处理下一行
1、AWK基本语法参数详解

Awk ‘pattern + {action} ‘ file

1、单引号’ ’ 是为了和shell 命令区分开;
2、大括号{}表示一个命令分组;
3、pattern 是一个过滤器,表示匹配pattern条件的行才进行action处理
4、action是处理动作,常见动作为print
5、使用#作为注释,pattern和action 可以只有其一,但不能两者都没有
2、AWK内置变量详解

FS 分隔符,默认是空格
OFS 输出分隔符
NR 当前行数,从1开始
NF 当前记录字段个数
$0 当前记录
$1~$n 当前记录段第n个字段(列)

3、AWK内置函数详解

Gsub(r,s) 在$0中用s代替
Index(s,t) 返回S中t的第一个位置
Length(s) S的长度
Match(s,r) S是否匹配
Split(s,a,fs) 在fs上将s分成序列a
Substr(s,p) 返回s从p开始的子串

4、AWK常用操作符,运算符及判断符

++ —— 增加与减少(前置或后置)
^ ** 指数(右结合性)
!+ — 非、一元加号、一元减号
+ - * / % 加、减、乘、除、余数
< <= == != > >= 数字比较
&& 逻辑and
|| 逻辑or
= += -= *= /= %= ^= **= 赋值

5、AWK与流程控制语句

If (condition) { } else { };

While { };
do { } while(condition);

for (init ;condition;step) { };

break/continue

6、常用AWK工具演练案例
例:AWK打印硬盘设备名称,默认以空格为分割符
[root@localhost ~]# df -h|awk '{print $2}'
Awk工具使用介绍
例:AWK以空格、冒号、\t、分号为分隔符
awk -F '[ :\t;]' '{print $1}' file
[root@localhost ~]# awk -F: '{print $1}' /etc/passwd
Awk工具使用介绍
例:AWK以冒号分割,打印第一列,同时将内容追加到/tmp/awk.log下
[root@localhost ~]# awk -F: '{print $1}' >> /tmp/awk.log /etc/passwd
Awk工具使用介绍
例:打印文本文件中的第3行至第5行,NR表示打印行,$0表示文本所有域
[root@localhost ~]# awk 'NR==3,NR==5' test.txt
Awk工具使用介绍
[root@localhost ~]# awk 'NR==3,NR==5 {print $0}' test.txt
Awk工具使用介绍
例:打印文本中的第3行至第5行的第一列与最后一列
[root@localhost ~]# awk 'NR==3,NR==5 {print $1,$NF}' test.txt
[root@localhost ~]# awk 'NR==3,NR==5 {print $1}' test.txt
[root@localhost ~]# awk 'NR==3,NR==5 {print $NF}' test.txt
Awk工具使用介绍
例:打印文本中行号大于80的行号
[root@localhost ~]# awk 'length($0)>80 {print NR}' test.txt
例:AWK引用shell变量,使用-V或者双引号+单引号即可
awk -v STR=hello '{print STR,$NF}' file
[root@localhost ~]# STR="hello";echo| awk '{print "'${STR}'";}'
Awk工具使用介绍
例:AWK以冒号切割,打印第一列同时只显示前5行
[root@localhost ~]# awk -F: 'NR>=1&&NR<=5 {print $1}' /etc/passwd
NR>=1&&NR<=5 大于等于1 and小于等于5 并打印出来
Awk工具使用介绍
例:awk指定文件得第一列得总和
[root@localhost ~]# cat test.txt |awk '{sum+=$1}END{print sum}'
Awk工具使用介绍
例:AWK NR行号除以2余数为0则跳过该行,继续执行下一行,打印在屏幕
[root@localhost ~]# awk -F: 'NR%2==0 {next} {print NR,$1}' /etc/passwd
Awk工具使用介绍
例:AWK添加自定义字段
[root@MQ1 ~]# ifconfig |awk 'NR>=2&&NR<=2 {print "ip_"$2}'
Awk工具使用介绍
例:取IP地址
[root@MQ1 ~]# ifconfig |awk 'NR>=2&&NR<=2 {print $2}'
Awk工具使用介绍
例:AWK与if组合实战,判断数字比较
[root@MQ1 ~]# echo 3 2 1 |awk '{ if(($1>$2)||($1>$3)) {print $2} else {print $1}}'
Awk工具使用介绍
例:AWK与数组组合实战,统计passwd文件用户
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
Awk工具使用介绍
例:awk分析Nginx访问日志的状态码404、502等错误信息页面,统计次数大于20的IP地址
awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'
例:统计服务器连接状态
[root@ugreen_pgRelay ~]# netstat -an | awk '/tcp/ {print $NF}' | sort | uniq –c
Awk工具使用介绍

  • 微信公众号
  • 这是我的微信公众号扫一扫
  • weinxin
  • 我的QQ技术群
  • 我的QQ技术群扫一扫
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: