shell编程四剑客之awk

shell编程四剑客之awk

目录:
opion(选项)常用参数如下
1、AWK基本语法参数详解:
2、AWK内置变量详解:
3、AWK内置函数详解:
4、AWK常用操作符,运算符及判断符:
5、AWK与流程控制语句:
6、常用AWK工具企业演练案列:

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一,以Aho、Weinberger、Kernighan三位发明者名字首字母命名为AWK,AWK是一个行级文本高效处理工具,AWK经过改进生成的新的版本有Nawk、Gawk,一般Linux默认为Gawk,Gawk是AWK的GNU开源免费版本。

  • AWK基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则继续处理下一行

其语法参数格式为,AWK常用参数、变量、函数详解如下:

awk   'pattern   +   {action}'     file

AWK基本语法参数详解:

单引号' '是为了和shell命令区分开;
大括号{ }表示一个命令分组;
pattern是一个过滤器,表示匹配pattern条件的行才进行Action处理;
action是处理动作,常见动作为Print;
使用#作为注释,pattern和action可以只有其一,但不能两者都没有。

AWK内置变量详解:

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

AWK内置函数详解:

gsub(r,s):	在$0中用s代替r;
index(s,t):	返回s中t的第一个位置;
length(s):	s的长度;
match(s,r):	s是否匹配r;
split(s,a,fs):在fs上将s分成序列a;
substr(s,p):	返回s从p开始的子串。

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

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

AWK与流程控制语句:

if(condition) { } else { };
while { };
do{ }while(condition);
for(init;condition;step){ };
break/continue

常用AWK工具企业演练案列:

  • NF=指的是当前记录字段个数
  • $NF=指的是最后一列
  • END 指的是结束
  • {next} 指的是下一个
1、AWK打印硬盘设备名称,默认以空格为分割:
df | awk '{print $1}'
2、AWK以空格、冒号、\t、分号为分割:
awk -F '[:\t;]' '{print $5}' jfedu.txt
3、AWK以冒号分割,打印第一列,同时将内容追加到/tmp/awk.log下:
awk -F: {print $1 >> "/tmp/awk.log"} jfedu.txt
4、打印jfedu.txt文件中的第3行至第5行,NR表示打印行,$0表示文本所有域:
awk 'NR==3,NR==5 {print}' jfedu.txt
5、打印jfedu.txt文件中的第3行至第5行的第一列与最后一列:
awk 'NR==3,NR==5 {print $1,$NF}' jfedu.txt
6、打印jfedu.txt文件中,长度大于80的行号:
awk 'length($0)>80 {print NR}' jfedu.tzt
7、AWK引用Shell变量,使用-v或者双引号+单引号即可:
awk -v STR=hello '{print STR,$NF}' jfedu.txt
STR="hello";echo | awk '{print "'${STR}'";}'
8、AWK以冒号切割,打印第一列同时只显示前5行:
awk -F":" 'NR==1,NR==5 {print $1}' jfedu.txt
或者
awk -F":" 'NR>=1&&NR<=5 {print $1}' jfedu.txt
或者
cat jfedu.txt | head -5 | awk -F":" '{print $1}'
9、Awk指定文件jfedu.txt第一列的字符串总和:
cat jfedu.txt | awk'{sum+=$1} END {print sum}'
10、AWK NR行号除以2余数为0则跳过该行,继续执行下一行,打印在屏幕:
awk -F: 'NR%2==0 {next} {print NR,$1}' jfedu.txt
11、AWK添加自定义字符:
ifconfig ens33 |grep -w inet |awk '{print "ip_"$2}'
12、AWK与if组合实战,判断数字比较:
echo 1 2 3 | awk '{if(($1>2)||($1>$3)) {print $2} else {print $1}}'
13、awk分析Nginx访问日志的状态码404、502等错误信息页面,统计次数大于20的IP地址。利用排序、查重再排序
awk '{if($9~/502/499/500/503/504/) print $1,$9}'access.log|sort|uniq -c|sort -nr |awk '{if($1>20) print $2}'
14、Awk统计服务器状态连接数:
netstat -an | awk '/tcp/ {print $NF}'|sort|uniq -c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值