awk 数组理解与应用

awk 数组无须实现定义

ckl[abc]=6

ckl[xyz]=9

abc 为下标名称

9 则为下标对应的值

BEGIN 为模式前匹配,即为匹配之前操作

END 为模式匹配后,即为匹配后操作

如常用的统计TCP状态的awk命令

# netstat -ant | awk ‘/^tcp/{STA[$NF]++}END{for ( k in STA) {print k,STA[k]}}‘

TIME_WAIT 4

CLOSE_WAIT 19

FIN_WAIT2 1

ESTABLISHED 135

LAST_ACK 2

LISTEN 21

/^tcp/ 匹配以tcp开头的

STA 定义一个数组

$NF 为最后一个字段

STA[$NF]++ 将最后一个字段内容加入到数组中,最后一个字段内容为下标,如果相同则递加

END 定义匹配后的操作

for ( k in STA)  定义k为变量,循环数组STA

print k,STA[k] 打印下标的内容和数组对于下标的值

如统计nginx 访问ip的统计量

# cat access.log

58.49.184.16 - - [15/Jan/2014:15:40:12 +0800] "GET /zh_CN/dragonball/announcement.xml HTTP/1.1" 404 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"

58.49.184.16 - - [15/Jan/2014:15:40:14 +0800] "GET /favicon.ico HTTP/1.1" 404 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"

58.49.184.16 - - [15/Jan/2014:15:41:07 +0800] "GET /zh_CN/dragonball/ HTTP/1.1" 403 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"

58.49.184.16 - - [15/Jan/2014:15:41:14 +0800] "GET /zh_CN/ HTTP/1.1" 403 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"

执行命令

# cat access.log | awk ‘{ACC[$1]++}END{for (c in ACC) {print c,ACC[c]}}‘

58.49.184.16 6

ACC 定义数组

$1 第一个字段为下标,即IP

ACC[$1]++ 定义ACC数组,ip为数组下标,如IP相同则递加,下标对应的值为递加后的结果

print c,ACC[c] 打印IP及IP为下标的数组的内容

时间: 2024-08-04 07:03:55

awk 数组理解与应用的相关文章

初学awk数组会遇到的几个常见问题

原题目: 处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题) 答案的详细讲解请参考: http://lidao.blog.51cto.com/3388056/1912219 文件内容: http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html h

awk入门及awk数组相关实战

知识点: l 记录与字段 l 模式匹配:模式与动作 l 基本的awk执行过程 l awk常用内置变量(预定义变量) l awk数组(工作常用) l awk语法:循环.条件 l awk常用函数 l 向awk传递参数 l awk引用shell变量 l awk小程序及调试思路 [[email protected] ~]# awk --version|head -1 GNU Awk 3.1.7 第1章 记录和字段 record记录==行, field字段相当于列,字段==列. awk对每个要处理的输入数

awk数组用法

两个文件,从文件b首列查找出等于文件a的行并输出[[email protected] ~]# cat a1367[[email protected] ~]# cat b1 2 32 3 43 4 54 5 65 6 76 7 87 8 9 shell脚本[[email protected] ~]# cat jieguo #!/bin/bashy=`sed -n 'p' a |wc -l`  #a 行数x=`sed -n 'p' b |wc -l`  #b行数for((i=1;i<=$y;i++)

(转)awk数组详解及企业实战案例

awk数组详解及企业实战案例 原文:http://www.cnblogs.com/hackerer/p/5365967.html#_label03.打印数组:1. [[email protected] test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";for(key in array) print key,array[key]}'2. 1 zhurui3. 2 zhuzhu4. [[email protect

JavaScript中的伪数组理解

看过jQuery源码的人都知道类数组对象,与我们熟知的arguments对象很像 构造一个类数组必须有两个条件 第一个条件:你必须给对象定义个splice方法,只要他是一个function就可以 第二个条件:就是赋值一个length属性,或者增加push,unshift,shift,pop其中任何一个方法,并且调用了一次. 当这两个条件同时满足那么当前的对象在控制台输出后跟数组的格式一模一样. 一般而言大部分都是这样构造一个类数组对象(jQuery就是这么干的).因为相比而言,这样更简洁,并且更

shell数组和awk数组

awk终于能入门了,所以整理了该文章,内容大多来自网上. 一.bash支持一维数组(不支持多维数组),没有限定数组的大小.在shell中,用括号来表示数组,数组元素用空格符号分割开.类似于C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0 1. 定义数组 数组名array,元素a b c [[email protected]~]# array=(a b c) 2.获取所有元素 [[email protected]~]# echo ${a

获取连接状态数的awk数组命令

awk -n|more [email protected]780:~/Icpp/server$ netstat -n|more 激活Internet连接 (w/o 服务器) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 28 0 10.8.0.171:43313 91.189.92.10:443 CLOSE_WAIT tcp 0 0 10.8.0.171:37374 116.213.120.232:80 ESTABLISH

awk数组计数和去重---统计域名访问次数

1.awk数组 假设我们有一个酒店 酒店<===>Green 酒店里面有几个房间515,516,517,519这几个房间 酒店515房间<===>GreenHotel[515] 酒店516房间<===>GreenHotel[516] 酒店517房间<===>GreenHotel[517] 酒店519房间<===>GreenHotel[519] 酒店房间里面入住客人 酒店110房间住着xiaowei<===>greenhotel[515

awk数组

1.使用awk数组统计出以下域名中相同域名出现的次数 [[email protected]]# cat url.txt  http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html http://www.etiantian.org/3.html http://post.etia