shell (awk)数组使用案例

1.取ifconfig eth0的IP地址

[[email protected] ~]$ ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:68:47:71

inet addr:192.168.48.144  Bcast:192.168.48.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe68:4771/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:48161 errors:0 dropped:0 overruns:0 frame:0

TX packets:25022 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:36048837 (34.3 MiB)  TX bytes:2202106 (2.1 MiB)

[[email protected] ~]$ ifconfig eth0|awk -F ‘[ :]+‘ ‘NR==2{print NR,$4}‘

2 192.168.48.144

2.统计apache日志单IP访问请求数排名

[[email protected] ~]$ cat 2.txt

10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

10.0.0.5 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

10.0.0.6 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

[[email protected] ~]$ awk ‘{print $1}‘ 2.txt |sort|uniq -c

6 10.0.0.3

1 10.0.0.5

1 10.0.0.6

[[email protected] ~]$ awk ‘{array[$1]++}END{for(k in array){print k,array[k];}}‘ 2.txt

10.0.0.3 6

10.0.0.5 1

10.0.0.6 1

3.统计域名访问量

[[email protected] ~]$ cat 1.txt

http://www.baidu.com/index.html

http://www.163.com/1.html

http://www.cnblogs.com/index.html

http://www.baidu.com/2.html

http://www.163.com/index.html

http://www.qq.com/index.html

http://www.baidu.com/3.html

http://www.163.com/2.html

http://www.baidu.com/2.html

[[email protected] ~]$ awk ‘{split($0,array,"/+");key=array[2];count[key]++}END{for(kk in count) {print kk,count[kk]}}‘ 1.txt

www.qq.com 1

www.cnblogs.com 1

www.baidu.com 4

www.163.com 3

[[email protected] ~]$ awk -F "[ /]+" ‘{array[$2]++}END{for(i in array){print i,array[i]}}‘ 1.txt

www.qq.com 1

www.cnblogs.com 1

www.baidu.com 4

www.163.com 3

4.计算每个人的总工资和平均工资

[[email protected] ~]$ awk ‘{array[$2]+=$3;count[$2]++}END{for(key in count){print key,array[key]"k",array[key]/count[key]}}‘ 3.txt

kuqi 20k 10

jeacen 14k 7

yingsui 27k 13.5

xiaofen 16k 8

wodi 23k 11.5

yideng 21k 10.5

5.对本地IP和远程IP去重并统计重复数

[[email protected] ~]$ cat 4.txt

Proto Recv-Q Send-Q Local Addree Foreign Addree              State

tcp            0         0 0.0.0.0:80         0.0.0.0:*     LISTEN

tcp            0         0 115.29.49.213:80 117.136.27.254:13779     SYN_RECV

tcp            0         0 115.29.49.213:80     113.97.117.157:1847     SYN_RECV

tcp            0         0 115.29.49.213:80     117.136.40.20:19594     SYN_RECV

tcp            0         0 115.29.49.213:80     117.136.40.20:19595     SYN_RECV

tcp            0         0 115.29.49.213:80     121.236.219.69:45363     SYN_RECV

tcp            0         0 0.0.0.0:21         0.0.0.0:*     LISTEN

tcp            0         0 0.0.0.0:22     0.0.0.0:*         LISTEN

unix         3 [] SYREAM CONNECTED 11183664 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183646 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183665 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183668 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183654 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183655 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183668 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183676 /TMP/MYSQL.SOCK

unix         3 [] SYREAM CONNECTED 11183672 /TMP/MYSQL.SOCK

[[email protected] ~]$ awk -F ‘[ :]+‘ ‘/^tcp/{array[$4" "$6]++}END{for(key in array){print key,array[key]}}‘ 4.txt

115.29.49.213 117.136.40.20 2

0.0.0.0 0.0.0.0 3

115.29.49.213 113.97.117.157 1

115.29.49.213 121.236.219.69 1

115.29.49.213 117.136.27.254 1

6.统计源IP端口及目的IP同时去重

[[email protected] ~]$ cat 5.txt

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 10.0.0.131:1227->210.192.121.172:80 on ixp7) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 10.0.0.131:1227->210.192.121.172:80 on ixp7) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 10.0.0.131:1227->210.192.121.172:80 on ixp7) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 10.0.0.131:1227->210.192.121.172:80 on ixp7) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 10.0.0.131:1227->210.192.121.172:80 on ixp7) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 10.0.0.43:54963->203.81.19.92:80 on ppp6) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (UDP 10.0.0.19:1441->121.14.96.233:80 on ppp0) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (UDP 172.16.1.103:57318->211.147.6.3:80 on ppp2) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 172.16.1.203:4372->61.135.163.86:80 on ixp7) [0,0]

Dec 2 01:17:42 10.0.0.0 2009 RV016 RGFW-OUT:ACCEPT (TCP 10.0.0.131:1227->210.192.121.172:80 on ixp7) [0,0]

[[email protected] ~]$ vim 5.sh

{

split($9,array,":|->")

sip=array[1]

sport=array[2]

mip=array[3]

if (!((sip,sport,mip) in tee)) {

tee[sip,sport,mip] = 1

}

}

END{

for (key in tee)

print key

}

[[email protected] ~]$ awk -f 5.sh 5.txt

172.16.1.103 57318    211.147.6.3

10.0.0.19    1441      121.14.96.233

172.16.1.203 4372    61.135.163.86

10.0.0.43    54963    203.81.19.92

10.0.0.131   1227     210.192.121.172

优化效果如下

在5.sh开头添加BEGIN { printf("%-16s %-6s %-16s\n","SIP","SPORT","MIP")}

[[email protected] ~]$ awk -f 5.sh 5.txt

SIP              SPORT  MIP

172.16.1.10357318211.147.6.3

10.0.0.191441121.14.96.233

172.16.1.203437261.135.163.86

10.0.0.4354963203.81.19.92

10.0.0.1311227210.192.121.172

时间: 2024-10-26 17:03:08

shell (awk)数组使用案例的相关文章

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数组详解及企业实战案例 原文: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

利用shell解决企业实际问题案例实践

已知老男孩IT教育的某一周的财务招生费用报表如下: 学号 学生 提层 所交费用 欠费 课程顾问 1 葛毅 1500 13100 0 歪歪 2 罗嘉毅 1500 13000 0 丹丹 3 吴星 500 15000 0 歪歪 4 臧阔 500 3200 0 雨神 5 陈吉 500 7500 0 歪歪 6 朱明 500 15000 0 雨神 7 雷林 100 3000 0 丹丹 8 陈恩林 100 5300 0 歪歪 9 张林坤 300 3200 0 雨神 10 梁宇 80 2500 0 雪神 11

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对每个要处理的输入数

使用shell+awk完成Hive查询结果格式化输出

好久不写,一方面是工作原因,有些东西没发直接发,另外的也是习惯给丢了,内因所致.今天是个好日子,走起! btw,实际上这种格式化输出应该不只限于某一种需求,差不多是通用的. 需求: --基本的:当前Hive查询结果存在数据与表头无法对其的情况,不便于监控人员直接查看,或者导出到excel中,需要提供一个脚本,将查询结果处理下,便于后续的查看或者操作. --额外的:A.每次查询出来的结果字段数.字段长度不固定:B.每个数据文件中可能包含不只一套查询结果,即存在多个schema. 想法: 对于基本需

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++)

linux shell awk 语法

引用:http://blog.csdn.net/weekly123/article/details/1465675 inux shell awk 语法   Awk 是一种非常好的语言,同时有一个非常奇怪的名称.在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 将使您迅速掌握 awk 编程技巧.随着本系列的进展,将讨论更高级的主题,最后将演示一个真正的高级 awk 演示程序.捍卫 awk在本系列文章中,我将使您成为精通 awk 的编码人员.我承认,awk 并没有一个非常好听且又非

shell中数组的基本使用

参考文档:<老男孩 shell编程实战> 数组 数组的概念 略 数组的操作 定义和赋值 方法一: a[1]="xianwei" a[2]="qiuyue" a[3]="duoduo" 方法二: a=(1 2 3)#注意用空格而不是逗号 方法三: a=([1]=one [2]=two [3]=three) 方法四: a=(`ls /tmp`) a=($(ls /tmp)) 输出 注意打印的格式是 ${数组名[下标]} printf &q

awk 数组

Arrays Arrays are subscripted with an expression between square brackets ([ and ]). If the expression is an expression list (expr, expr ...)  then the array subscript is a string consisting of  the concatenation of the (string) value of each expressi

shell之数组

数组的定义 何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念).那么shell中数组是怎么定义呢,我们来看两种数据类型:一是数值类型,二是字符串类型:虽然shell本身是弱类型的,但也可以这么区分. 数值类型的数组:一对括号表示数组,数组中元素之间使用"空格"来隔开. 举个例子 数值类型: arr_number=(1 2 3 4 5); 字符串类型:同样,使用一对括号表示数组,其中数组中的元素使用双括号或者单引号