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下对文本和数据进行 ...
随机推荐
- [刷题] PTA 6-7 统计某类完全平方数
要求: 实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int IsTheNumber ( const int N ); 其中 ...
- Docker------Linux安装Docker
1.添加yum源 yum install epel-release –y yum clean all yum list 2.安装并运行Docker yum install docker-io –y s ...
- 创建用户(adduser和useradd)和删除用户(userdel)
创建用户(adduser和useradd)和删除用户(userdel)及 一 用户创建命令: # adduser 用户名 # useradd 用户名 1) useradd 与 adduser ...
- QT学习笔记(一)——Helloworld
QT学习笔记(一)--Helloworld 一.调试的基本方法: Log调试法 --在代码中加入一定的打印语句 --打印程序状态和关键变量的值 断点调试法: --在开发环境中的对应代码行加上断点 -- ...
- Springboot2.x入门——helloWorld
Springboot2.x入门--helloWorld 一.简介 1.1 Springboot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的 ...
- 安卓开发(2)—— Kotlin语言概述
安卓开发(2)-- Kotlin语言概述 Android的官方文档都优先采用Kotlin语言了,学它来进行Android开发已经是一种大势所趋了. 这里只讲解部分的语法. 如何运行Kotlin代码 这 ...
- unity editor模式下读取文件夹资源
string path = EditorUtility.OpenFolderPanel("Load png Textures", "", "" ...
- java学习之旅
jar文件其实就是一个压缩包,里面包含很多class文件(一个class文件是一个类的字节码).方便在网络上传输.可以规定版本号,更容易进行版本控制. var只能在方法内使用,不能用于定义成员变量. ...
- [leetcode] 46. 全排列(Java)
46. 全排列 这题我们可以借用31. 下一个排列写的nextPermutation函数来做,稍微改造一下即可 注意要先给nums排个序 class Solution { // 当没有下一个排列时re ...
- 转载 | python inferface使用
Python中最特别的关键字之一便是pass,它放在类或函数里,表示类和函数暂不定义. class PassClass: pass def PassFun(): pass 如上实现最精简的类和函数定义 ...