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下对文本和数据进行 ...
随机推荐
- vmware安装ubuntu ,一直处于end kernel panic - not syncing : corrupted stack end detected inside scheduler
vmware安装ubuntu ,一直处于end kernel panic - not syncing : corrupted stack end detected inside scheduler y ...
- Zookeeper——Docker下安装部署
单节点安装 一. 环境说明 docker: 18.09.9-ce zookeeper: 3.5.6 二. 拉取 zookeeper 镜像 拉取镜像 docker pull zookeeper 默认是摘 ...
- Linux_rpm包管理
一.rpm包命令规范 1.包的组成 主包:bind-9.7.1-1.el5.i586.rpm 子包:bind-libs-9.7.1-1.el5.i586.rpm bind-utils-9.7.1-1. ...
- mysql左连接和分组实例
例: 需求:查询A表中的所有列,并查询A表中的数据(ID)在B表中出现的次数,然后按model排序,最后所有结果在一张表中展示 A表结构: B表结构: ini_device_policy表中id与in ...
- linux系统ifconfig中网卡名和网卡配置文件名称不同的解决办法
比如我的配置文件, cd /etc/sysconfig/network-scripts/ifcfg-eth1是这个名称,但是我使用ifconfig显示的信息却是 eth0,很明显这不是我配置文件的名称 ...
- Linux下RAID磁盘阵列的原理与搭建
RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余能力的阵列"之意. 磁盘阵列是由很多价格较 ...
- CAS(Compare and Swap)无锁算法-学习笔记
非阻塞同步算法与CAS(Compare and Swap)无锁算法 这篇问题对java的CAS讲的非常透彻! 锁的代价 1. 内核态的锁的时候需要操作系统进行一次上下文切换,加锁.释放锁会导致比较多的 ...
- 『动善时』JMeter基础 — 38、JMeter中实现跨线程组关联
目录 1.JMeter中实现跨线程组关联说明 (1)JMeter中实现跨线程组关联步骤 (2)测试计划内包含的元件 2.用户登陆请求的相关操作 (1)进行登陆操作获取Cookie信息 (2)把Cook ...
- AI算子列表
AI算子列表 概述 目前只有部分算子可在一个库中同时运行在MLU220和MLU270平台.也就是用户使用 ./build_cnplugin.sh --mlu270 命令编译生成的 libcnplugi ...
- CUDA 内存统一分析
CUDA 内存统一分析 关于CUDA 编程的基本知识,如何编写一个简单的程序,在内存中分配两个可供 GPU 访问的数字数组,然后将它们加在 GPU 上. 本文介绍内存统一,这使得分配和访问系统中任何处 ...