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. [bug] docker:write /var/lib/docker/tmp/GetImageBlob613162680: no space left on device

    原因 分区空间不够,无法安装镜像 参考 https://www.cnblogs.com/elizwy/p/7722898.html https://blog.csdn.net/TinyJian/art ...

  2. 如何在我的EC2实例状态更改时获取自定义电子邮件通知

    具体详情,请参见: https://amazonaws-china.com/cn/premiumsupport/knowledge-center/ec2-email-instance-state-ch ...

  3. KEIL expected an identifier

    error: #40: expected an identifier(在线等) C语言编译是提示的.这句话是什么意思啊, 怎样解决啊  我来答  浏览 33290 次   4个回答 #活动# [芝麻 ...

  4. HDFS 的内存存储是什么?

    引言 HDFS 的定位就是一个文件系统,用于存储文件,而 HDFS 对于文件的存储方式有两种: 内存存储 异构存储 内存存储 什么是内存存储? 首先,我们来了解一下到底什么是 "内存存储&q ...

  5. 8.1 fdisk:磁盘分区工具

    fdisk 是Linux下常用的磁盘分区工具.受mbr分区表的限制,fdisk工具只能给小于2TB的磁盘划分分区.如果使用fdisk对大于2TB的磁盘进行分区,虽然可以分区,但其仅识别2TB的空间,所 ...

  6. linux命令--使用fsck修复文件系统

    使用fsck修复文件系统错误 1.问题描述 服务器maint_samba 由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现文件系统错误,需 ...

  7. teprunner测试平台定时任务这次终于稳了

    teprunner测试平台已经有一个多月没有更新了,主要原因是定时任务不够稳定,经过反复试错,找到了解决办法,这次终于稳定了. 本文开发内容 作为测试平台而言,定时任务算是必备要素了,只有跑起来的自动 ...

  8. python发送丁丁消息

    import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...

  9. python mixin到底是什么

    python mixin到底是什么 1.什么是Mixin 在面向对象编程中,Mixin是一种类,这种类包含了其他类要使用的方法,但不必充当其他类的父类.其他类是如何获取Mixin中的方法因语言的不同而 ...

  10. SQL查询要求两个条件同时成立

    SELECT * FROM [TABLE] WHERE CASE WHEN O_State='已处理' AND O_Pay='已付' THEN 0 ELSE 1 END=1