33、awk命令详解
33.1、命令介绍:
awk不仅仅是linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告。
awk的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,awk可以在命令
行上直接编辑命令进行操作,也卡伊编写成awk程序进行更为复杂的运用。
33.2、 区域和记录:
1、区域:
$0(取整行数据) $1 $2 $3 $4 $5....$NF(代表最后一个字段)
2、记录:
33.3、数据切割:
默认情况下是以空字符串为分割符来分割列的;
-F:以特定条件分割
[ :]+:以“:”和“ ”分割多行连接
NR:行数
{print $1} :要打印的内容
$0:表示一行
NF:表示最后一行
[root@m01 ~]# awk -F "[ /]+" 'NR>1 && NR<5 {print $2}' /etc/passwd
bin:
sbin:
var
[root@m01 ~]# awk 'NR>1 && NR<5 {print $0}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
33.4、awk数组:
1、awk数组介绍:
类似于shell中的数组
提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾工作;
任何在BEGIN之后列出的操作且在{}内,将在awk开始扫描输入之前执行,而END之后列出
的操作将在扫描完全部的输入之后执行;
因此,通常使用BEGIN来显示变量和初始化变量,所有的内容写在一起;使用END来输出最终结果,后面接文件;
两者最好不要同时使用;
2、awk数组脚本:
[root@backup scripts]# vim awk.sh
#!/bin/awk
BEGIN{
array[1]="lc"
array[2]="lc1"
for (key in array)
print key,array[key]
}
[root@backup scripts]# awk -f awk.awk
1 lc
2 lc1
3、awk命令行模式:
(1)BEGIN模式:
[root@backup scripts]# awk 'BEGIN {array[1]="lc";array[2]="lc1";for (key in array) print key,array[key]}'
1 lc
2 lc1
(2)END模式:
1)测试参数:
[root@backup scripts]# cat awk1.txt
1 beijing
2 shanghai
2)使用命令:
[root@backup scripts]# awk '{array[$1]=$2}END{for(key in array) print key,array[key]}' awk1.txt
1 beijing
2 shanghai
#参数解释:
array[$1]=$2 #$1代表第一列内容作为下标,$2代表第二列的内容作为值,然后放入数组array后进行输出;
33.5、awk的企业案例题:
1、对网站地址进行统计:
(1)实验数据:
[root@backup scripts]# vim www.txt
http://mp3.lc.com/index.html
http://post.lc.com/index.html
http://post.lc.com/index.html
http://www.lc.com/index.html
http://www.lc.com/index.html
http://www.lc.com/index.html
(2)命令代码:
[root@backup scripts]# awk -F '/' '{array[$3]++}END{for (key in array) print key,array[key]}' www.txt | sort -rn -k 2 | head -10
www.lc.com 3
post.lc.com 2
mp3.lc.com 1
array[$3]=array[$3]+1等价于array[$3]++
1)代码的读取方式:
读取第一行:array[mp3.lc.com]=1
读取第二行:array[post.lc.com]=1 #被覆盖
读取第三行:array[post.lc.com]=2
读取第四行:array[www.lc.com]=1 #被覆盖
读取第五行:array[www.lc.com]=2 #被覆盖
读取第六行:array[www.lc.com]=3
2、对web日志分析,列出访问最多的ip地址,并按照降序排列:
(1)方法一:
[root@backup scripts]# awk '{s[$1]++} END {for (k in s) print k,s[k]}' access_log | sort -k 2 -nr | head -10
172.16.1.41 42
::1 6
172.16.1.254 5
(2)方法二:
[root@backup scripts]# awk '{print $1}' access_log | sort | uniq -c | sort -rn | head -10
42 172.16.1.41
6 ::1
5 172.16.1.254
3、统计企业工作中高并发web服务器不同网络连接状态对应的数量:
(1)方法一:
[root@backup scripts]# awk '/^tcp/ {S[$NF]++} END {for (k in S) print S[k],k}' netstat.log | sort -nr | head -10
7 LISTEN
1 ESTABLISHED
(2)方法二:
[root@backup scripts]# awk '/^tcp/ {print $NF}' netstat.log | sort | uniq -c | sort -rn | head -10
7 LISTEN
1 ESTABLISHED
4、解决机房流量暴涨案例问题:
(1)案例
拔掉上连口网线;
过几分钟将网线口接上;
查看流量服务器,看哪台服务器流量大:
如果所有服务器流量都很大,是dos攻击;
如果是就1到2台有问题就是服务器中毒,需要将网线拔掉,
然后重装服务器或迁移到其它服务器上;
(2)解决代码:
输出格式:[访问次数*单个文件大小] [访问次数] [文件名(需要带url)]
方法一:
使用纯awk命令,比较难理解舍弃;
方法二:
[root@backup scripts]# awk '{print $7"\t"$10}' access_log | sort | uniq -c | awk '{print $1*$3"\t"$1"\t"$2}' | sort -rn | head -10
4961 1 /
3956 1 /icons/poweredby.png
2326 1 /icons/apache_pb.gif
572 2 /favicon.ico
36 6 /
0 42 /
33、awk命令详解的更多相关文章
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- awk命令详解二
awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...
- shell编程之awk命令详解
shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...
- linux awk命令详解,使用system来内嵌系统命令, awk合并两列
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- Shell学习(五)—— awk命令详解
一.awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...
- awk命令详解
搜索 纠正错误 添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...
- [Linux] linux awk命令详解
reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...
- [转]linux awk命令详解
原文链接 : http://blog.chinaunix.net/uid-23302288-id-3785105.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢 ...
- Linux awk命令详解??????????(研究)
http://blog.chinaunix.net/uid-25120309-id-3801250.html 一. AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...
随机推荐
- [Python] 地图API
请求位置信息 https://restapi.amap.com/v3/place/text?keywords=北京大学&city=beijing&output=xml&offs ...
- Fio 输出内容的解释
Fio 输出内容的解释 feilianbb 2016-01-11 16:18:54 27828 收藏 19 文章标签: Linux 存储 Fio SSD 性能 翻译原文来源 https://t ...
- -bash: ll: 未找到命令
第一步将alias ll='ls -l'添加到/etc/profile # head /etc/profile# /etc/profilealias ll='ls -l'# System wide e ...
- 10.2-3 ifup&ifdown:激活与禁用网络接口
ifup:激活网络接口 ifup 和 ifdown 命令用于激活指定的网络接口.ifup命令其实是一个Shel脚本,有Shel基础的读者可以使用which命令来找到这个脚本并读一读.命令可读取 ...
- RIP OSPF 等路由协议属于计算机网络分层中的哪一层
RIP基于UDP,BGP基于TCP,OSPF EGP基于IP 在TCP/IP协议栈中定义的路由协议用于发现和维护前往目的地的最短路径.可以认为它们不属于网络层协议(注意,是用based on,而不是实 ...
- MySQL之数据查询语言(DQL)
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块: SELECT <字段> FROM <表名> WHERE <查询条件> - ...
- idea开发web项目框架失效和无法启动问题
不会配置idea的javaweb环境的小伙伴可以点击此链接 idea最新版,配置javaweb环境 很多小伙伴用idea开发web项目可能会出现所有代码都写对了但是无论如何都没法运行的情况,eclip ...
- 在微信框架模块中,基于Vue&Element前端的微信公众号和企业微信的用户绑定
在一个和微信相关的业务管理系统,我们有时候需要和用户的微信账号信息进行绑定,如对公众号.企业微信等账号绑定特定的系统用户,可以进行扫码登录.微信信息发送等操作,用户的绑定主要就是记录公众号用户的ope ...
- Step By Step(编写C函数的技巧)
Step By Step(编写C函数的技巧) 1. 数组操作: 在Lua中,"数组"只是table的一个别名,是指以一种特殊的方法来使用table.出于性能原因,Lua的C ...
- 根据某个数据 来筛选 DataTree 分支数里面的数据是否符合规则 进行筛选分支,展示
问题:如何在 DataTree 树形数据里每个分支里根据特定某个元素值,然后挑选出来 思路:先把分支提取出来,每个都要进行判断. 主要用到的电池: >.Cull Pattern 拓展资料:以下是 ...