Linux命令之awk数组使用范例

目录

取ifconfig bond0的IP地址    1

命令如下:    2

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

第一种方法    2

第二种方法    2

统计域名访问量    3

第一种方法:    3

第二种方法:    3

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

命令如下:    4

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

命令如下:    5

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

命令如下:    6

美化效果如下:    7

取ifconfig bond0的IP地址

 1 [[email protected] mnt]# ifconfig bond0
 2
 3 bond0 Link encap:Ethernet HWaddr 00:0C:29:27:8F:AD
 4
 5 inet addr:192.168.1.123 Bcast:192.168.1.255 Mask:255.255.255.0
 6
 7 inet6 addr: fe80::20c:29ff:fe27:8fad/64 Scope:Link
 8
 9 UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
10
11 RX packets:27291 errors:0 dropped:0 overruns:0 frame:0
12
13 TX packets:15128 errors:0 dropped:0 overruns:0 carrier:0
14
15 collisions:0 txqueuelen:0
16
17 RX bytes:38569717 (36.7 MiB) TX bytes:1032861 (1008.6 KiB)

命令如下:

1 [[email protected] mnt]# ifconfig bond0 |awk -F "[ :]+" ‘NR==2{print NR" "$4}‘
2
3 2 192.168.1.123

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

 1 [[email protected] mnt]# head -5 2.txt
 2
 3 10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*
 4
 5 10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*
 6
 7 10.0.0.5 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*
 8
 9 10.0.0.3 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*
10
11 10.0.0.6 -- [21/Mar/2015-07:50:17+0800]*GET/HTTP/1.1*200 19 *-*

第一种方法

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

35 10.0.0.3

5 10.0.0.4

10 10.0.0.5

10 10.0.0.6

第二种方法

[[email protected] mnt]# awk ‘{array[$1]++} END {for(key in array) print key,array[key]}‘ 2.txt

10.0.0.3 35

10.0.0.4 5

10.0.0.5 10

10.0.0.6 10

  

统计域名访问量

[[email protected] mnt]# 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

第一种方法:

 1 [[email protected] mnt]# awk ‘{split($0,array,"/+");key=array[2];count[key]++}END{for(kk in count) print kk,count[kk]}‘ 1.txt
 2
 3 www.qq.com 1
 4
 5 www.cnblogs.com 1
 6
 7 www.baidu.com 4
 8
 9 www.163.com 3
10
11 

第二种方法:

1 [[email protected] mnt]# awk -F [/]+ ‘{array[$2]++} END {for(key in array) print key,array[key]}‘ 1.txt
2
3 www.qq.com 1
4
5 www.cnblogs.com 1
6
7 www.baidu.com 4
8
9 www.163.com 3

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

 1 [[email protected] mnt]# cat 3.txt
 2
 3 001 wodi 12k
 4
 5 002 yingsui 15k
 6
 7 003 jeacen 10k
 8
 9 004 yideng 10k
10
11 005 kuqi 8k
12
13 006 xiaofen 6k
14
15 007 wodi 11k
16
17 008 yingsui 12k
18
19 009 jeacen 4k
20
21 010 kuqi 12k
22
23 011 yideng 11k
24
25 012 xiaofen 10k

命令如下:

[[email protected] mnt]# awk ‘{array[$2]+=$3;count[$2]++}END{for(key in array) 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

  

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

 1 [[email protected] mnt]# cat 4.txt
 2
 3 Proto Recv-Q Send-Q Local Addree Foreign Addree              State
 4
 5 tcp            0         0 0.0.0.0:80         0.0.0.0:*     LISTEN
 6
 7 tcp            0         0 115.29.49.213:80 117.136.27.254:13779     SYN_RECV
 8
 9 tcp            0         0 115.29.49.213:80     113.97.117.157:1847     SYN_RECV
10
11 tcp            0         0 115.29.49.213:80     117.136.40.20:19594     SYN_RECV
12
13 tcp            0         0 115.29.49.213:80     117.136.40.20:19595     SYN_RECV
14
15 tcp            0         0 115.29.49.213:80     121.236.219.69:45363     SYN_RECV
16
17 tcp            0         0 0.0.0.0:21         0.0.0.0:*     LISTEN
18
19 tcp            0         0 0.0.0.0:22     0.0.0.0:*         LISTEN
20
21 unix         3 [] SYREAM CONNECTED 11183664 /TMP/MYSQL.SOCK
22
23 unix         3 [] SYREAM CONNECTED 11183646 /TMP/MYSQL.SOCK
24
25 unix         3 [] SYREAM CONNECTED 11183665 /TMP/MYSQL.SOCK
26
27 unix         3 [] SYREAM CONNECTED 11183668 /TMP/MYSQL.SOCK
28
29 unix         3 [] SYREAM CONNECTED 11183654 /TMP/MYSQL.SOCK
30
31 unix         3 [] SYREAM CONNECTED 11183655 /TMP/MYSQL.SOCK
32
33 unix         3 [] SYREAM CONNECTED 11183668 /TMP/MYSQL.SOCK
34
35 unix         3 [] SYREAM CONNECTED 11183676 /TMP/MYSQL.SOCK
36
37 unix         3 [] SYREAM CONNECTED 11183672 /TMP/MYSQL.SOCK

命令如下:

 1 [[email protected] mnt]# awk -F "[ :]+" ‘/^tcp/{array[$3" "$5]++}END{for(key in array) print key,array[key]}‘ 4.txt
 2
 3 115.29.49.213 113.97.117.157 1
 4
 5 115.29.49.213 117.136.27.254 1
 6
 7 0.0.0.0 0.0.0.0 3
 8
 9 115.29.49.213 117.136.40.20 2
10
11 115.29.49.213 121.236.219.69 1

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

 1 [[email protected] mnt]# head -10 5.txt
 2
 3 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]
 4
 5 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]
 6
 7 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]
 8
 9 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]
10
11 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]
12
13 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]
14
15 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]
16
17 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]
18
19 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]
20
21 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]

命令如下:

 1 [[email protected] mnt]# vim 5.sh
 2
 3 {
 4
 5 split($9,array,":|->")
 6
 7 sip=array[1]
 8
 9 sport=array[2]
10
11 mip=array[3]
12
13 if (!((sip,sport,mip) in tree)){
14
15 tree[sip,sport,mip] = 1
16
17 }
18
19 }
20
21 END{
22
23 for (key in tree)
24
25 print key
26
27 }
 1 [[email protected] mnt]# awk -f 5.sh 5.txt
 2
 3 172.16.1.10357318211.147.6.3
 4
 5 10.0.0.191441121.14.96.233
 6
 7 172.16.1.203437261.135.163.86
 8
 9 10.0.0.4354963203.81.19.92
10
11 10.0.0.1311227210.192.121.172

美化效果如下:

[[email protected] mnt]# cat 5.sh
BEGIN{
	printf("%-16s %-6s %-16s\n","SIP","SPORT","MIP")
}
{
	split($9,array,":|->")
	sip=array[1]
	sport=array[2]
	mip=array[3]
	if (!((sip,sport,mip) in tree)){
	tree[sip,sport,mip] = 1
	}
}
END{
	for (key in tree){
		split(key,out,SUBSEP)
	printf("%-16s %-6s %-16s\n", out[1],out[2],out[3])
	}
}

  

 1 [[email protected] mnt]# awk -f 5.sh 5.txt
 2
 3 SIP SPORT MIP
 4
 5 172.16.1.103 57318 211.147.6.3
 6
 7 10.0.0.19 1441 121.14.96.233
 8
 9 172.16.1.203 4372 61.135.163.86
10
11 10.0.0.43 54963 203.81.19.92
12
13 10.0.0.131 1227 210.192.121.172
时间: 2024-11-25 18:25:59

Linux命令之awk数组使用范例的相关文章

linux 命令之awk

awk 是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分割符将每行切片,切开的部分再进行各种分析处理. awk命令形式: awk [-F | -f | -v] `BEGIN{} // {command1;command2;....;commandN} END{}` file [-F | -f | -v]   : 大参数,-F指定分隔符,-f调用脚本,-v定义变量 ` `  :  引用代码块 BEGIN : 初始化代码块,在对每一行进行处理之前,初始化代码,(在脚本中主要是引用全局变量,

Linux命令:awk简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 备注:awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. 语法: awk [options] 'program' file file ... awk [options] 'PATTERN{action}' file

linux命令:awk文本处理命令

   awk命令简介: awk是一个强大的文本分析工具,通常,awk是以文件的每一行,为处理单位的.awk每接收文件的一行,然后执行相应的命令,来处理文本. 1.命令格式: awk 'pattern {action}' {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所 执行的一系列命令.花括号({})不需要在程序中始终出现,但它们用于根据特定的 模式对一系列指令进行分组. pattern就是要表示的正则表达式,用斜杠括起来.

linux命令之awk

简介 awk命令的名称是取自三位创始人Alfred Aho .Peter Weinberger 和 Brian Kernighan姓名的首字母,awk有自己的程序设计语言,设计简短的程序,读入文件,数据排序,处理数据,生成报表等功能. awk 通常用于文本处理和报表生成,最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作. awk 通常以文件的一行为处理单位的,awk每接收文件的一行,然后执行相应的命令,来处理文本,完整的awk脚本通常用来格式化文本

Linux命令之乐--awk

过滤出mysql的监听端口 netstat -lnt|grep 3306|awk -F '[ :]+' '{printf $5}'

linux命令之 awk, sed, scp

AWK是一种处理文本文件的语言,是一个强大的文本分析工具 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 使用方法 awk '{pattern + action}' {filenames} 显示最近登录的5个帐号 #last -n 5 | awk '{print $1}' details: http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

【每天一个linux命令】awk

awk:取出指定字符 #[-F ':'] 将查找出的内容以 : 为分割 #[{print $0}] 分割之后打印出第n个值($0 是所有) cat /etc/passwd |awk -F ':' '{print $0}' #[END{print $0}] 以空格分割,打印出最后一行所有值 cat awk.log |awk 'END{print $0}' #[BEGIN{print "begin"} {print $1 "," $7} END{print "

Linux Shell学习--awk命令详解

(1).awk介绍 awk是由Alfred Aho .Peter Weinberger 和 Brian Kernighan于1977年开发的变成语言,awk是上述三位创建者姓的首字母. Awk的基本语法与c语言类似,如果对c语言很熟悉,那么学习awk编程也将事半功倍. Awk功能与sed相似,都是用来进行文本处理的,awk语言可以从文件或字符串中基于指定规则浏览和抽取信息,在抽取信息的基础上,才能进行其他文本操作.   awk是一款设计用于数据流的工具.它颇有玩头的原因就在于可以对列和行进行操作

Linux学习之awk命令

一. AWK 说明    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用. awk的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所