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命令详解的更多相关文章

  1. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. awk命令详解二

    awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...

  3. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  4. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  5. Shell学习(五)—— awk命令详解

    一.awk简介   awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...

  6. awk命令详解

    搜索 纠正错误  添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...

  7. [Linux] linux awk命令详解

    reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...

  8. [转]linux awk命令详解

    原文链接 : http://blog.chinaunix.net/uid-23302288-id-3785105.html   awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢 ...

  9. Linux awk命令详解??????????(研究)

    http://blog.chinaunix.net/uid-25120309-id-3801250.html 一.  AWK 说明  awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...

随机推荐

  1. xsos:一个在Linux上阅读SOSReport的工具

    xsos:一个在Linux上阅读SOSReport的工具 时间 2019-05-23 14:36:29  51CTO 原文  http://os.51cto.com/art/201905/596889 ...

  2. Linux学习之路-Linux-at及cron命令【7】---20171215

    Linux学习之路-Linux-at及cron命令[7]---20171215 DannyExia000人评论986人阅读2017-12-24 17:28:03   ntpdate 命令 [root@ ...

  3. centos7基于luks对磁盘进行加密

    centos7基于luks对磁盘进行加密 1,504 views A+ 所属分类:linux 收  藏 LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它 ...

  4. Docker——基本使用及常用命令

    Docker 是一个开源的应用容器引擎,而一个容器其实是一个虚拟化的独立的环境,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. ...

  5. 继承(extends), 多态 , 抽象(abstract)接口() 易混难点解析

    特性 java是单继承的,一个类直接继承的父类只能有唯一的一个 java中父类可以有多个子类 Object是所有类的父类,一个类没有父类则默认继承Object; 继承中的重写 子类重写方法访问权限不能 ...

  6. 听说 JVM 性能优化很难?今天我小试了一把!

    文章首发于公众号「陈树义」及个人博客 shuyi.tech,欢迎关注访问. 对于 Java 开发的同学来说,JVM 性能优化可以说是比较难掌握的知识点.这不仅因为 JVM 性能优化需要掌握晦涩难懂的 ...

  7. 【七】Kubernetes 探针介绍 - 存活、就绪探针案例测试

    一.探针概述 探针是有 kubelet 对容器执行的定期诊断,并不是由 Master 节点发起的探测,而是由每一个 Node 所在的 kubelet 进行探测,这样可以减轻 Master 节点系统负载 ...

  8. Django(46)drf序列化类的使用(ModelSerializer)

    前言 我们上篇文章使用到了Serializer类,可能有小伙伴说太过复杂,那么本篇就为大家带来更加简便的序列化类ModelSerializer ModelSerializer 先来看下ModelSer ...

  9. 5分钟就能学会的简单结构 | MLP-Mixer: An all-MLP Architecture for Vision | CVPR2021

    文章转自:微信公众号「机器学习炼丹术」 作者:炼丹兄(欢迎交流,共同进步) 联系方式:微信cyx645016617 论文名称:「MLP-Mixer: An all-MLP Architecture f ...

  10. 一篇文章弄懂 Java 反射的使用

    说到Java反射,必须先把 Java 的字节码搞明白了,也就是 Class , 大 Class 在之前的文章中,我们知道了Java的大Class就是类的字节码,就是一个普通的类,里面保存的是类的信息, ...