三刀客之awk

三剑客之awk

第1章 awk简介

第1章 awk简介

1.1 awk简介

  • 一种名字怪异的言语。
  • 格局扫描和处理。处理文本流,水流。

awk不仅仅是linux系统中的3个限令,而且是一种编程语言,可以用来拍卖多少和转移报告。

处理的数据足以是2个或七个公文,可以是发源专业输入,也可以经过管道获取标准输入,awk可以

在命令行上直接编辑命令举行操作,也得以编写成awk程序来进展更进一步复杂的选取。那里最重要讲解

awk命令行的运用。

学完本章你会领会:

  • 域(字段)与记录
  • 格局与合作
  • 中央的awk执行进度
  • awk常用内置变量(预订义变量)
  • awk数组(工作中比较常用)

还有部分其他awk用法:(那里不作介绍)

  • awk语法:循环,条件
  • awk常用函数:print
  • 向awk传递参数
  • awk引用shell变量
  • awk编程

 

1.1 awk简介

  • 一种名字怪异的言语。
  • 方式扫描和处理。处理文本流,水流。

awk不仅仅是linux系统中的三个发令,而且是一种编程语言,可以用来拍卖数量和变化报告。

处理的数码足以是2个或七个文本,可以是来自专业输入,也足以由此管道获取标准输入,awk可以

在命令行上直接编辑命令举行操作,也可以编写成awk程序来展开更为复杂的使用。那里主要教师

awk命令行的利用。

学完本章你会询问:

  • 域(字段)与记录
  • 格局与协作
  • 主干的awk执行进程
  • awk常用内置变量(预约义变量)
  • awk数组(工作中相比常用)

再有一部分别的awk用法:(那里不作介绍)

  • awk语法:循环,条件
  • awk常用函数:print
  • 向awk传递参数
  • awk引用shell变量
  • awk编程

 

1.2 awk环境简介

[root@linux-node1 ~]# cat /etc/redhat-release

CentOS release 6.6 (Final)

 

[root@linux-node1 ~]# uname -r

2.6.32-504.el6.x86_64

 

[root@linux-node1 ~]# awk –version

GNU Awk 3.1.7

 

[root@linux-node1 ~]# which awk

/bin/awk

#/bin下和/sbin下的命令不一致:

/bin : commands in this dir are all system installed user commands
   系统的一对命令

/sbin:  commands in this dir are all system installed super user
commands  一级用户指令
系统管理命令,那里存放的是系统管理员使用的保管程序 

/usr/bin: user commands for applications  中期安装的一部分软件的运作脚本

/usr/sbin: super user commands for applications  一流用户的部分管制程序

 

 

1.2 awk环境简介

[root@linux-node1 ~]# cat /etc/redhat-release

CentOS release 6.6 (Final)

 

[root@linux-node1 ~]# uname -r

2.6.32-504.el6.x86_64

 

[root@linux-node1 ~]# awk –version

GNU Awk 3.1.7

 

[root@linux-node1 ~]# which awk

/bin/awk

#/bin下和/sbin下的通令不同:

/bin : commands in this dir are all system installed user commands
   系统的部分限令

/sbin:  commands in this dir are all system installed super user
commands  一流用户指令
系统管理命令,那里存放的是系统管理员使用的治本程序 

/usr/bin: user commands for applications  中期安装的部分软件的运维脚本

/usr/sbin: super user commands for applications  一流用户的局地管制程序

 

 

1.3 awk的格式

awk指令是由形式,动作,只怕格局和动作的组合组成。

方式既pattern,可以接近领会成sed的情势匹配,可以由表明式组成,也可以是多个正斜杠之间的正则表达式。比如NSportage=1,那就是情势,可以把她了解为二个原则。

动作即action,是由在大括号里面的一条或多条语句组成,语句之间用分号隔开。如awk使用格式:

 图片 1

 

图1-1 awk命令行格式

awk处理的始末可以来自专业输入(<),2个或多个文件文件或管道。

图片 2

 

图1-2 awk情势动作解释图

pattern既形式,也足以驾驭为原则,也叫找哪个人,你找哪个人?高矮,胖瘦,男女?都以规范,既形式。

action 既动作,可以知晓为干啥,找到人随后你要做哪些。

 

1.3 awk的格式

awk指令是由格局,动作,大概方式和动作的咬合组成。

情势既pattern,能够接近掌握成sed的格局匹配,可以由表明式组成,也得以是三个正斜杠之间的正则表明式。比如NPRADO=1,这就是方式,可以把他知道为贰个标准。

动作即action,是由在大括号里面的一条或多条语句组成,语句之间用分号隔开。如awk使用格式:

 图片 3

 

图1-1 awk命令行格式

awk处理的内容可以来自专业输入(<),一个或多少个文本文件或管道。

图片 4

 

图1-2 awk格局动作解释图

pattern既情势,也可以清楚为规范,也叫找什么人,你找什么人?高矮,胖瘦,男女?都是标准化,既方式。

action 既动作,可以知道为干啥,找到人随后你要做什么。

 

1.4 awk执行进度

在深切摸底awk前,大家要求了然awk怎样处理文件的。

示范1-1 演示文件的创办

[root@linux-node1 ~]# mkdir -p /server/files/

[root@linux-node1 ~]# head /etc/passwd > /server/files/awkfile.txt

[root@linux-node1 ~]# cat /server/files/awkfile.txt  

root:x:0:0:root:/root:/bin/bash

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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

[root@linux-node1 ~]# awk ‘NR>=2{print $0}’
/server/files/awkfile.txt

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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

[root@linux-node1 ~]# awk ‘NR>=2{print NR,$0}’
/server/files/awkfile.txt

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

awk是透过一行一行的处理公事,那条命令中蕴涵格局部分(条件)和动作部分(动作),awk将处理格局指定的行。

小结awk执行进程:

a)awk读入第一行内容

b)判断符合方式中的条件(NHaval>=2)

l 假若匹配暗许则执行相应的动作({print
$0})

l 假如不般配原则,继续读取下一行

c))继续读取下一行

d)重复进度a-c,直到读取到最终一行(EOF:end of file)

 

1.4 awk执行进度

在深刻理解awk前,大家要求明白awk怎么着处理文件的。

演示1-1 示范文件的创设

[root@linux-node1 ~]# mkdir -p /server/files/

[root@linux-node1 ~]# head /etc/passwd > /server/files/awkfile.txt

[root@linux-node1 ~]# cat /server/files/awkfile.txt  

root:x:0:0:root:/root:/bin/bash

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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

[root@linux-node1 ~]# awk ‘NR>=2{print $0}’
/server/files/awkfile.txt

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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

[root@linux-node1 ~]# awk ‘NR>=2{print NR,$0}’
/server/files/awkfile.txt

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

awk是由此一行一行的拍卖文件,那条命令中包罗方式部分(条件)和动作部分(动作),awk将拍卖形式指定的行。

小结awk执行进程:

a)awk读入第一行内容

b)判断符合格局中的条件(NRubicon>=2)

l 如果匹配默许则执行相应的动作({print
$0})

l 如若不合作原则,继续读取下一行

c))继续读取下一行

d)重复进度a-c,直到读取到终极一行(EOF:end of file)

 

 1.5 区域和记录

名称

含义

field

域,区域,字段

record

记录,默认一整行

eg:$1,$2,$3,$NF

$0: 整行,三个记下

$ 取 引用

 

1.5.1 字段(区域)

每条记下都以由多少个字段(field)组成的,暗许情状下里面的相间符是由空白符(即空格或制表符)来分隔,并且将分隔符记录在停放变量FS中。每行记录的字段数保存在awk的松手变量NF中。

 

 

图1-4 awk区域分隔符

awk使用内置变量FS来记录字段分隔符的故事情节,可以经过BEGIN语句来改变,也足以在命令行上通过-F参数来改变,上边通过演示来抓实学习。

示范1-3  FS演示文件生成

[root@linux-node1 ~]# awk -F “:” ‘NR>=2&&NR<=5{print $1,$3}’
/server/files/awkfile.txt

bin 1

daemon 2

adm 3

lp 4

1.5.2记录

awk对各种要拍卖的输入数据人为都以兼具格式和布局的,而不仅仅是一堆字符串。暗中同意景况下,每一行内容都变成一条记下,并以换行符为止。

 

² 暗许景况 -一行==1个笔录,每行都是三个记下。

² LX570S ==》 record separator 各个记录读入的时候的分隔符。

² N奥迪Q3==》 number of record 行号,记录的数。awk当前处理着的,记录的数。

² OSportageS==》 output record separate 输出食肉的相间符

 

awk使用内置变量来存放记录分隔符,帕杰罗S代表的是输入的笔录分隔符,那些值也可以以特定的措施修改。

前方我们讲到过的$0,awk使用$0来代表整条记录。记录分隔符\n保存在LacrosseS变量中。此外awk对每一行的记录号都有二个置于变量N中华V来保存,每处理完一条记下N奥迪Q5的值就会自动+1.

上面通过示范来拉长一下如何是记录,记录分隔符。

示范1-5 N索罗德记录行号

[root@linux-node1 files]# awk ‘{print NR,$0}’ awkfile.txt

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

演示1-6 CRUISERS记录分隔符

#以/为分隔符记录一行

[root@linux-node1 files]# awk ‘BEGIN{RS=”/”}{print NR,$0}’
awkfile.txt

1 root:x:0:0:root:

2 root:

3 bin

4 bash

bin:x:1:1:bin:

5 bin:

6 sbin

7 nologin

daemon:x:2:2:daemon:

8 sbin:

9 sbin

10 nologin

adm:x:3:4:adm:

11 var

12 adm:

13 sbin

14 nologin

lp:x:4:7:lp:

15 var

16 spool

17 lpd:

18 sbin

19 nologin

#以:为分隔符记录一行

[root@linux-node1 files]# awk ‘BEGIN{RS=”:”}{print NR,$0}’
awkfile.txt  

1 root

2 x

3 0

4 0

5 root

6 /root

7 /bin/bash

bin

8 x

9 1

10 1

11 bin

12 /bin

13 /sbin/nologin

daemon

14 x

15 2

16 2

17 daemon

18 /sbin

19 /sbin/nologin

adm

20 x

21 3

22 4

23 adm

24 /var/adm

25 /sbin/nologin

lp

26 x

27 4

28 7

29 lp

30 /var/spool/lpd

31 /sbin/nologin

awk 眼中的文书,从头到尾一段连接的字符串,恰巧中间稍微\n(回车换行符)

 

示例1-7 RS为空值

#福睿斯S为空值的时候将点名行输出为一行

[root@linux-node1 files]# awk ‘BEGIN{RS=””}{print NR,$1,$2,$3}’
awkfile.txt  

 

 

说明:

在行首打印输出记录号,并打印出每一行$0的故事情节

 

信用社案例1:总括文件中各种单词的再度数量

[root@linux-node1 files]# sed -ri.bak ‘s#[:/0-9]+# #g’
awkfile.txt

1)单词弄成一列(排队)

其中 -o 表示“only-matching 精确匹配

[root@linux-node1 files]# egrep -o “[a-zA-z]+” awkfile.txt |sort|
uniq -c|sort -r

      5 x

      5 sbin

      4 nologin

      4 bin

      3 root

      3 adm

      2 var

      2 lp

      2 daemon

      1 spool

      1 lpd

      1 bash

2)统计

[root@linux-node1 files]# awk ‘BEGIN{RS=”() | \n”}{print $0}’
awkfile.txt|sort |uniq -c|sort -rn

      5 x

      5 sbin

      4 nologin

      4 bin

      3 root

      3 adm

      2 var

      2 lp

      2 daemon

      1 spool

      1 lpd

      1 bash

      1

 

公司案例2: 计算文件中各类字母的双重数量

 

记录小结:

  1. 大象放冰橱分几步?打开冰柜,把大象放进去,关闭冰橱门。
  2. 多用N逍客,NF,$数字,协作你实行调试awk命令。
  3. N兰德酷路泽存放着各类记录的号(行号)读取新行时候会自行+1
  4. CRUISERS是记录的分隔符,简单了然就是可以指定逐个记录的尾声标志。
  5. (用RS替换\n)
  6. PRADOS效率就是表示1个记下的终止。
  7. FS标识着各种区域的完工。

 1.5 区域和记录

名称

含义

field

域,区域,字段

record

记录,默认一整行

eg:$1,$2,$3,$NF

$0: 整行,二个记下

$ 取 引用

 

1.5.1 字段(区域)

每条记下都以由多个字段(field)组成的,暗中认可处境下里面的相间符是由空白符(即空格或制表符)来分隔,并且将分隔符记录在放权变量FS中。每行记录的字段数保存在awk的嵌入变量NF中。

 

 

图1-4 awk区域分隔符

awk使用内置变量FS来记录字段分隔符的情节,可以经过BEGIN语句来改变,也足以在命令行上通过-F参数来改变,上面通过演示来增长学习。

演示1-3  FS演示文件生成

[root@linux-node1 ~]# awk -F “:” ‘NR>=2&&NR<=5{print $1,$3}’
/server/files/awkfile.txt

bin 1

daemon 2

adm 3

lp 4

1.5.2记录

awk对每种要处理的输入数据人为都以兼备格式和社团的,而不仅仅是一堆字符串。默许情形下,每一行内容都成为一条记下,并以换行符停止。

 

² 默许意况 -一行==3个笔录,每行都以多少个笔录。

² RAV4S ==》 record separator 各种记录读入的时候的分隔符。

² NQashqai==》 number of record 行号,记录的数。awk当前拍卖着的,记录的数。

² O汉兰达S==》 output record separate 输出食肉的相间符

 

awk使用内置变量来存放在记录分隔符,SportageS代表的是输入的记录分隔符,那几个值也得以以一定的主意修改。

面前我们讲到过的$0,awk使用$0来表示整条记录。记录分隔符\n保存在RAV4S变量中。此外awk对每一行的记录号都有二个松手变量N汉兰达来保存,每处理完一条记下NHighlander的值就会自行+1.

上边通过演示来做实一下什么是记录,记录分隔符。

以身作则1-5 N卡宴记录行号

[root@linux-node1 files]# awk ‘{print NR,$0}’ awkfile.txt

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

示范1-6 路虎极光S记录分隔符

#以/为分隔符记录一行

[root@linux-node1 files]# awk ‘BEGIN{RS=”/”}{print NR,$0}’
awkfile.txt

1 root:x:0:0:root:

2 root:

3 bin

4 bash

bin:x:1:1:bin:

5 bin:

6 sbin

7 nologin

daemon:x:2:2:daemon:

8 sbin:

9 sbin

10 nologin

adm:x:3:4:adm:

11 var

12 adm:

13 sbin

14 nologin

lp:x:4:7:lp:

15 var

16 spool

17 lpd:

18 sbin

19 nologin

#以:为分隔符记录一行

[root@linux-node1 files]# awk ‘BEGIN{RS=”:”}{print NR,$0}’
awkfile.txt  

1 root

2 x

3 0

4 0

5 root

6 /root

7 /bin/bash

bin

8 x

9 1

10 1

11 bin

12 /bin

13 /sbin/nologin

daemon

14 x

15 2

16 2

17 daemon

18 /sbin

19 /sbin/nologin

adm

20 x

21 3

22 4

23 adm

24 /var/adm

25 /sbin/nologin

lp

26 x

27 4

28 7

29 lp

30 /var/spool/lpd

31 /sbin/nologin

awk 眼中的公文,从头到尾一段连接的字符串,恰巧中间略微\n(回车换行符)

 

示例1-7 RS为空值

#OdysseyS为空值的时候将点名行输出为一行

[root@linux-node1 files]# awk ‘BEGIN{RS=””}{print NR,$1,$2,$3}’
awkfile.txt  

 

 

说明:

在行首打印输出记录号,并打印出每一行$0的始末

 

商店案例1:计算文件中每一种单词的重新数量

[root@linux-node1 files]# sed -ri.bak ‘s#[:/0-9]+# #g’
awkfile.txt

1)单词弄成一列(排队)

个中 -o 表示“only-matching 精确匹配

[root@linux-node1 files]# egrep -o “[a-zA-z]+” awkfile.txt |sort|
uniq -c|sort -r

      5 x

      5 sbin

      4 nologin

      4 bin

      3 root

      3 adm

      2 var

      2 lp

      2 daemon

      1 spool

      1 lpd

      1 bash

2)统计

[root@linux-node1 files]# awk ‘BEGIN{RS=”() | \n”}{print $0}’
awkfile.txt|sort |uniq -c|sort -rn

      5 x

      5 sbin

      4 nologin

      4 bin

      3 root

      3 adm

      2 var

      2 lp

      2 daemon

      1 spool

      1 lpd

      1 bash

      1

 

商户案例2: 计算文件中各种字母的双重数量

 

记录小结:

  1. 大象放冰橱分几步?打开冰柜,把大象放进去,关闭冰橱门。
  2. 多用N奥德赛,NF,$数字,合作你举行调试awk命令。
  3. NPRADO存放着种种记录的号(行号)读取新行时候会活动+1
  4. EnclaveS是记录的分隔符,简单明了就是可以指定各个记录的结尾标志。
  5. (用RS替换\n)
  6. 昂科雷S功效就是意味着2个笔录的扫尾。
  7. FS标识着每种区域的终结。

1.6 形式匹配

1.6.1 正则表明式

awk协理的正则表达式元字符

元字符

功能

示例

解释

^

字符串开端

/^cool/

同盟所有以cool伊始的字符串

$

字符串结尾

/cool$/

合营所有以cool结尾的字符串

.

很是任意单个字符

(包括回车符)

/c..l/

匹配字母c,然后七个随机字符,再以l结尾的行,比如ckk1,c@#1等

*

匹配0个或两个前导字符

/a*cool/

匹配0个或三个a之后紧跟着cool的行,比如cool,aaacool

+

再度三遍或几次以上

/a+b/

匹配1个或三个a加b的行

匹配0个或1个指路字符

/a?b/

匹配b或ab的行

[]

同盟指定字符组内的任三个字符

/^[abc]/

匹配以字母a或b或c初阶的行

[^]

相当不在指定字符组

/^[^abc]/

 匹配不以字母a或b或c开头的行

x{m}

x重复m次

x重复至少m次

x重复至少m次,但不超过n次

亟需指定参数:–posix恐怕–re-interval

/(cool){5}

亟待留意的一点是,cool加括号或不加括号的分别,x可以使字符串也得以只是多个字符,所有/cool\{5\}/表示匹配coo再加上多少个l,即coolllll,

^(cool\){2,\}则意味匹配coolcool,

coolcoolcool等

x{m,}

/(cool){2,}/

 

/(cool){5,6}/

正则表明式的拔取,默认是在行内查找匹配的字符串,若有协作则执行action操作,可是有时仅须要固定的列来合作指定的正则表明式,比如:$3这一列查找匹配tom的行,这样就要求此外四个门当户对操作符:

~:用于对记录或字段的表达式举行(匹配)

!~:用于表达与~想法的情致。(不合营)

#匹配 第五列以l可能a伊始的有着行 ,那里(l|a) 可以换成[al]

[root@linux-node1 files]# awk ‘$3~/^(l|a)/{print $0}’ awkfile.txt

adm x adm var adm sbin nologin

lp x lp var spool lpd sbin nologin

#取eth0 ip

[root@linux-node1 files]# ifconfig eth0| awk -F “[ :]+”
‘NR==2{print $4}’

10.0.0.7

[root@linux-node1 files]# ifconfig eth0| awk -F “addr:| Bcast:”
‘NR==2{print $2}’  

10.0.0.7

[root@linux-node1 files]# echo “—–=====1#######2”

—–=====1#######2

[root@linux-node1 files]# echo “—–=====1#######2″|grep
“[-=#]”

—–=====1#######2

[root@linux-node1 files]# echo “—–=====1#######2″|grep -o
“[-=#]”

=

=

=

=

=

#

#

#

#

#

#

#

[root@linux-node1 files]# echo “—–=====1#######2″|egrep -o
“[-=#]+”

—–=====

#######

 

 

 

#匹配o出现五回依然五次的行打印第一列和结尾一列

[root@linux-node1 files]# awk –posix ‘$1~/o{1,2}/{print NR,$1,$NF}’
awkfile.txt

1 root bash

3 daemon nologin

1.6.2比较表明式

示例1-18

[root@linux-node1 files]# awk ‘NR>=2&&NR<=5{print NR,$0}’
awkfile.txt

2 bin x bin bin sbin nologin

3 daemon x daemon sbin sbin nologin

4 adm x adm var adm sbin nologin

5 lp x lp var spool lpd sbin nologin

1.6.3限量形式

awk ‘/start pos/,/end pos/{print $0} ‘ test.txt

awk ‘/start pos/,NR==XXX{print $0}’ passwd.oldboy

限定情势的时候,范围条件的时候,表明式必须合营一行,

[root@linux-node1 files]# awk ‘NR==2,NR==5{print NR,$1,$3}’
awkfile.txt

2 bin bin

3 daemon daemon

4 adm adm

5 lp lp

[root@linux-node1 files]# awk ‘NR==2,NR==5{print NR,$0}’ awkfile.txt
     

2 bin x bin bin sbin nologin

3 daemon x daemon sbin sbin nologin

4 adm x adm var adm sbin nologin

5 lp x lp var spool lpd sbin nologin

[root@linux-node1 files]# awk ‘NR==2,NR<=5{print NR,$0}’
awkfile.txt  

2 bin x bin bin sbin nologin

1.6.4铺面案例:取出常用服务端口号

ftp http https mysql ssh 端口号
/etc/services 文件

[root@linux-node1 files]# awk -F “[ /]+”
‘$1~/ftp|https|mysql|ssh)$/{print $1,$2}’ /etc/services|uniq

小结:

  1. 模式===》条件
  2. 正则表达式
  3. 规格表明式(NRubicon>=2
    N奥迪Q7==2)
  4. 限定表明式
  5. (NR==2,NR==5)
  6. /正则表达式-初阶/,/正则截止/
  7. $1~/正则表达式-初叶/,$3~/正则停止/ 行,记录。
  8. 区域:FS刀分隔的,FS区域分隔符
  9. 记录:奇骏S刀分隔的,RS记录分隔符
  10. FS===>NF 区域的数额
  11. KugaS===>N猎豹CS6 记录号,随着记录的充实NLX570自动+1

 

1.6 情势匹配

1.6.1 正则说明式

awk资助的正则表达式元字符

元字符

功能

示例

解释

^

字符串早先

/^cool/

同盟所有以cool初始的字符串

$

字符串结尾

/cool$/

同盟所有以cool结尾的字符串

.

匹配任意单个字符

(包蕴回车符)

/c..l/

匹配字母c,然后七个随机字符,再以l结尾的行,比如ckk1,c@#1等

*

匹配0个或多少个前导字符

/a*cool/

匹配0个或三个a之后紧跟着cool的行,比如cool,aaacool

+

再一次几回或一回以上

/a+b/

匹配二个或七个a加b的行

匹配0个或2个向导字符

/a?b/

匹配b或ab的行

[]

同盟指定字符组内的任多少个字符

/^[abc]/

匹配以字母a或b或c伊始的行

[^]

格外不在指定字符组

/^[^abc]/

 匹配不以字母a或b或c发轫的行

x{m}

x重复m次

x重复至少m次

x重复至少m次,但不超越n次

内需指定参数:–posix恐怕–re-interval

/(cool){5}

急需专注的有个别是,cool加括号或不加括号的区分,x能够使字符串也可以只是二个字符,所有/cool\{5\}/表示匹配coo再增进六个l,即coolllll,

^(cool\){2,\}则代表匹配coolcool,

coolcoolcool等

x{m,}

/(cool){2,}/

 

/(cool){5,6}/

正则表明式的运用,暗中认同是在行内查找匹配的字符串,若有合作则执行action操作,但是有时仅须要稳定的列来同盟指定的正则表明式,比如:$3这一列查找匹配tom的行,那样就需求此外五个门当户对操作符:

~:用于对记录或字段的表达式进行(匹配)

!~:用于表明与~想法的趣味。(不般配)

#匹配 第五列以l或然a初步的兼具行 ,那里(l|a) 能够换成[al]

[root@linux-node1 files]# awk ‘$3~/^(l|a)/{print $0}’ awkfile.txt

adm x adm var adm sbin nologin

lp x lp var spool lpd sbin nologin

#取eth0 ip

[root@linux-node1 files]# ifconfig eth0| awk -F “[ :]+”
‘NR==2{print $4}’

10.0.0.7

[root@linux-node1 files]# ifconfig eth0| awk -F “addr:| Bcast:”
‘NR==2{print $2}’  

10.0.0.7

[root@linux-node1 files]# echo “—–=====1#######2”

—–=====1#######2

[root@linux-node1 files]# echo “—–=====1#######2″|grep
“[-=#]”

—–=====1#######2

[root@linux-node1 files]# echo “—–=====1#######2″|grep -o
“[-=#]”

=

=

=

=

=

#

#

#

#

#

#

#

[root@linux-node1 files]# echo “—–=====1#######2″|egrep -o
“[-=#]+”

—–=====

#######

 

 

 

#匹配o出现一次依然三遍的行打印第一列和最终一列

[root@linux-node1 files]# awk –posix ‘$1~/o{1,2}/{print NR,$1,$NF}’
awkfile.txt

1 root bash

3 daemon nologin

1.6.2比较表明式

示例1-18

[root@linux-node1 files]# awk ‘NR>=2&&NR<=5{print NR,$0}’
awkfile.txt

2 bin x bin bin sbin nologin

3 daemon x daemon sbin sbin nologin

4 adm x adm var adm sbin nologin

5 lp x lp var spool lpd sbin nologin

1.6.3限量格局

awk ‘/start pos/,/end pos/{print $0} ‘ test.txt

awk ‘/start pos/,NR==XXX{print $0}’ passwd.oldboy

限定形式的时候,范围条件的时候,表明式必须合作一行,

[root@linux-node1 files]# awk ‘NR==2,NR==5{print NR,$1,$3}’
awkfile.txt

2 bin bin

3 daemon daemon

4 adm adm

5 lp lp

[root@linux-node1 files]# awk ‘NR==2,NR==5{print NR,$0}’ awkfile.txt
     

2 bin x bin bin sbin nologin

3 daemon x daemon sbin sbin nologin

4 adm x adm var adm sbin nologin

5 lp x lp var spool lpd sbin nologin

[root@linux-node1 files]# awk ‘NR==2,NR<=5{print NR,$0}’
awkfile.txt  

2 bin x bin bin sbin nologin

1.6.4商店案例:取出常用服务端口号

ftp http https mysql ssh 端口号
/etc/services 文件

[root@linux-node1 files]# awk -F “[ /]+”
‘$1~/ftp|https|mysql|ssh)$/{print $1,$2}’ /etc/services|uniq

小结:

  1. 模式===》条件
  2. 正则表明式
  3. 条件表明式(NR>=2
    NRAV4==2)
  4. 范围表明式
  5. (NR==2,NR==5)
  6. /正则表明式-开头/,/正则截止/
  7. $1~/正则表达式-早先/,$3~/正则停止/ 行,记录。
  8. 区域:FS刀分隔的,FS区域分隔符
  9. 记录:ENVISIONS刀分隔的,奥迪Q3S记录分隔符
  10. FS===>NF 区域的数量
  11. TiguanS===>NENCORE 记录号,随着记录的扩充NOdyssey自动+1

 

1.7 awk布局的追思

1.7.1 BEGIN模块

BEGIN格局此前大家有在示范中涉嫌,自定义变量,给内容变量赋值等,都以用过。要求专注的是BEGIN方式前边要接跟3个action操作块,包括在大括号内。awk必须在对输入文件举行其余处理前先举办BEGIN定义的action操作块。大家得以不要任何输入文件,就可以对BEGIN模块举办测试,因为awk必要先实施完BEGIN形式,菜对输入文件做拍卖。BEGIN情势平常被用来修改内置变量OLX570S,奇骏S,FS,OFS等的值。

示例1-25

[root@linux-node1 files]# awk ‘BEGIN{print “this is begin!\nand
thiscommand donnot have file”}’

this is begin!

and thiscommand donnot have file

说明:

并未公文awk如故可以拍卖BEGIN形式下的操作块。

1.7.2 END模块

END 在awk读取完所有的公文的时候

awk编程思想:

1.先处理,最终再END模块输出。

与BEGIN模式绝对于的END格局,格式一样,然而END情势仅在awk处理完所有输入行后才进行拍卖。并且在END格局下awk不匹配任何输入行。

1.7.3 总计awk执行进程

1.读入一行

2.判断是或不是是须求的行 条件$3>15 满意超过15 执行action :print

3.不满意条件重复1,2步骤

1.7.4 企业案例3:统计文件之中的空行数量

[root@linux-node1 files]# grep -c “^$” /etc/services

16

[root@linux-node1 files]# awk ‘/^$/{a=a+1;print a}’ /etc/services  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[root@linux-node1 files]# awk ‘/^$/{a=a+1}END{print a}’ /etc/services
            

16

 

 head -20 /etc/passwd >awkfile2.txt

面试题:awkfile2.txt 里面 以:为分隔符,区域3大于15行,一共有个别许个?

[root@linux-node1 files]# awk -F “:” ‘$3>15{print $0}’
awkfile2.txt   

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin

rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin

#总计三遍,输出五遍

[root@linux-node1 files]# awk -F “:” ‘$3>15{a=a+1;print a}’
awkfile2.txt           

1

2

3

4

5

6

#处理完文件从此再输出a   那里a=a+1 可以用a++代替

[root@linux-node1 files]# awk -F “:” ‘$3>15{a=a+1;}END{print a}’
awkfile2.txt        

6

商厦面试题5:1+…..+100 1加到100的值,用awk完毕

root@linux-node1 files]# seq 100 > test.txt  

[root@linux-node1 files]# cat test.txt |awk ‘{a+=$0}END{print a}’

5050

[[root@linux-node1 files]# awk ‘a=a+$0;END{print a}’ test.txt |sed
-n ‘$p’

5050

1.7.4 集团案例4:

找出环境变量$PATH中,所有只有七个随机字符的下令,例如tee,并将他们重定向到command.txt中,须要一行呈现贰个,并在文书底部总括他们的个数.

 

[root@linux-node1 files]# find $(echo $PATH|tr “:” ” “) -type f -name
“???”| awk ‘{a++}END{print “result:”a}’

find: `/root/bin’: No such file or directory

result:75

通配符:用来协作文件名的。{}字符种类

正则表明:字符串

1.7.5 计算awk执行进度

 

[root@linux-node1 files]# awk -F “:” ‘BEGIN{print FS}’        

:

先执行命令再履行BEGIN模块

 

 

思想:

  1. awk宗旨情想就是现处理,然后END模块输出。(累加(a++;a+=$0),awk数组)
  2. BEGIN模块用于awk内置变量FS,KugaS的赋值,打印标题头的信息,(excel表格里面标题行)
  3. END模块用来最终输出,计算消息,awk数组消息。
  4. 区域,记录

 

  1. BEGIN和END模块只好有一个。不可以BEGIN{}BEGIN{}或许END{}END{}
  2. 找什么人干啥模块,可以是七个。

NR=2{print $1}NR=5{print $0}

1.7 awk构造的回想

1.7.1 BEGIN模块

BEGIN格局从前我们有在示范中关系,自定义变量,给内容变量赋值等,都以用过。须要小心的是BEGIN方式前面要接跟一个action操作块,包括在大括号内。awk必须在对输入文件举行此外处理前先实施BEGIN定义的action操作块。我们可以不要别的输入文件,就足以对BEGIN模块进行测试,因为awk需求先进行完BEGIN方式,菜对输入文件做处理。BEGIN情势日常被用来修改内置变量O奥德赛S,大切诺基S,FS,OFS等的值。

示例1-25

[root@linux-node1 files]# awk ‘BEGIN{print “this is begin!\nand
thiscommand donnot have file”}’

this is begin!

and thiscommand donnot have file

说明:

尚无公文awk仍旧可以处理BEGIN方式下的操作块。

1.7.2 END模块

END 在awk读取完所有的公文的时候

awk编程思想:

1.先处理,最后再END模块输出。

与BEGIN情势相对于的END形式,格式一样,但是END方式仅在awk处理完所有输入行后才举办拍卖。并且在END方式下awk不匹配任何输入行。

1.7.3 统计awk执行进度

1.读入一行

2.论断是还是不是是要求的行 条件$3>15 满意当先15 执行action :print

3.不满意条件重复1,2手续

1.7.4 企业案例3:统计文件之中的空行数量

[root@linux-node1 files]# grep -c “^$” /etc/services

16

[root@linux-node1 files]# awk ‘/^$/{a=a+1;print a}’ /etc/services  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[root@linux-node1 files]# awk ‘/^$/{a=a+1}END{print a}’ /etc/services
            

16

 

 head -20 /etc/passwd >awkfile2.txt

面试题:awkfile2.txt 里面 以:为分隔符,区域3大于15行,一共有个别许个?

[root@linux-node1 files]# awk -F “:” ‘$3>15{print $0}’
awkfile2.txt   

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin

rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin

#总括一回,输出三次

[root@linux-node1 files]# awk -F “:” ‘$3>15{a=a+1;print a}’
awkfile2.txt           

1

2

3

4

5

6

#处理完文件从此再输出a   那里a=a+1 可以用a++代替

[root@linux-node1 files]# awk -F “:” ‘$3>15{a=a+1;}END{print a}’
awkfile2.txt        

6

商厦面试题5:1+…..+100 1加到100的值,用awk完毕

root@linux-node1 files]# seq 100 > test.txt  

[root@linux-node1 files]# cat test.txt |awk ‘{a+=$0}END{print a}’

5050

[[root@linux-node1 files]# awk ‘a=a+$0;END{print a}’ test.txt |sed
-n ‘$p’

5050

1.7.4 公司案例4:

找出环境变量$PATH中,所有只有五个随机字符的指令,例如tee,并将他们重定向到command.txt中,必要一行展现三个,并在文书底部计算他们的个数.

 

[root@linux-node1 files]# find $(echo $PATH|tr “:” ” “) -type f -name
“???”| awk ‘{a++}END{print “result:”a}’

find: `/root/bin’: No such file or directory

result:75

通配符:用来合作文件名的。{}字符种类

正则表明:字符串

1.7.5 计算awk执行过程

 

[root@linux-node1 files]# awk -F “:” ‘BEGIN{print FS}’        

:

先执行命令再履行BEGIN模块

 

 

思想:

  1. awk大旨情想就是现处理,然后END模块输出。(累加(a++;a+=$0),awk数组)
  2. BEGIN模块用于awk内置变量FS,奥德赛S的赋值,打印标题头的音信,(excel表格里面题目行)
  3. END模块用来最终输出,统计消息,awk数组新闻。
  4. 区域,记录

 

  1. BEGIN和END模块只好有1个。不或然BEGIN{}BEGIN{}可能END{}END{}
  2. 找哪个人干啥模块,可以是三个。

NR=2{print $1}NR=5{print $0}

1.8awk内置变量(预订义变量)

 

变量名

属性

$0

当前记录

$1-$n

当前记录的第n个字段,字段间由FS分隔

FS

输入字段分隔符 默认是空格

NF

当前记录中的字段个数。就是有多少列

NR

已经读出的记录数,就是行号,从1开始

RS

输入的记录分隔符默认为换行符

OFS

输出字段分隔符 默认也是空格

ORS

输出的记录分隔符,默认为

FNR

当前文件的读入记录号

1.8awk平放变量(预订义变量)

 

变量名

属性

$0

当前记录

$1-$n

当前记录的第n个字段,字段间由FS分隔

FS

输入字段分隔符 默认是空格

NF

当前记录中的字段个数。就是有多少列

NR

已经读出的记录数,就是行号,从1开始

RS

输入的记录分隔符默认为换行符

OFS

输出字段分隔符 默认也是空格

ORS

输出的记录分隔符,默认为

FNR

当前文件的读入记录号

1.9 awk数组

演示1-9数组演示

array[b]=”aaa”:array…..

 

 

1.9.1商行面试题1

 

处理以下文件内容,将域名取出并基于域名举行计数排序处理(去重):(百度和sohu面试题)

[root@linux-node1 files]# cat awkfile3.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.etiantian.org/2.html

 

[root@linux-node1 files]# awk -F “/” ‘{array[$3]++}END{for(key in
array) print key,array[key]}’ awkfile3.txt

mp3.etiantian.org 1

post.etiantian.org 2

www.etiantian.org 3

 

[root@linux-node1 files]# awk -F “/+” ‘{array[$2]++}END{for(key in
array)print key,array[key]}’  awkfile3.txt

mp3.etiantian.org 1

post.etiantian.org 2

www.etiantian.org 3

小结:

 

  1. awk数组去重
  2. 选好分隔符 -F “/”
  3. 选好处理的区域,print
    $1,$3,$2
  4. array[$3]++
  5. 先拍卖,最后END模块输出
  6. 输出awk数组大家应用for(key in array)
  7. ===>for ()循环
  8. key in array 手去框里,抓苹果。
  9. key 就是苹果名字(数组成分的名字)
  10. array数组名(框的名字)
  11. 打印输出print
    key,array[key]

 

1.9.2 集团案例2总括各种IP的访问量

access_awk.log

 

1.10 awk有关法语统计

名称

含义

filed

域,区域,字段

record

记录,默认一整行

Filed Separator

FS:区域分隔符,表示一个区域的结束,字段,域

Number of Filed

NF:每一个记录中区域的数量

Record Separator

RS:记录分隔符,表示每个记录的结束

output filed separator

OFS

output Record Separator

ORS

awk当前处理的文件的记录号

FNR

[root@linux-node1 files]# seq 20 30 >20-30.txt

[root@linux-node1 files]# seq 50 60 >50-60.txt

[root@linux-node1 files]# awk ‘{print FNR,NR,$0}’ 20-30.txt 50-60.txt

1 1 20

2 2 21

3 3 22

4 4 23

5 5 24

6 6 25

7 7 26

8 8 27

9 9 28

10 10 29

11 11 30

1 12 50

2 13 51

3 14 52

4 15 53

5 16 54

6 17 55

7 18 56

8 19 57

9 20 58

10 21 59

11 22 60

1.9 awk数组

示范1-9数组演示

array[b]=”aaa”:array…..

 

 

1.9.1供销社面试题1

 

处理以下文件内容,将域名取出并基于域名举办计数排序处理(去重):(百度和sohu面试题)

[root@linux-node1 files]# cat awkfile3.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.etiantian.org/2.html

 

[root@linux-node1 files]# awk -F “/” ‘{array[$3]++}END{for(key in
array) print key,array[key]}’ awkfile3.txt

mp3.etiantian.org 1

post.etiantian.org 2

www.etiantian.org 3

 

[root@linux-node1 files]# awk -F “/+” ‘{array[$2]++}END{for(key in
array)print key,array[key]}’  awkfile3.txt

mp3.etiantian.org 1

post.etiantian.org 2

www.etiantian.org 3

小结:

 

  1. awk数组去重
  2. 选好分隔符 -F “/”
  3. 选好处理的区域,print
    $1,$3,$2
  4. array[$3]++
  5. 先处理,最终END模块输出
  6. 出口awk数组大家应用for(key in array)
  7. ===>for ()循环
  8. key in array 手去框里,抓苹果。
  9. key 就是苹果名字(数组元素的名字)
  10. array数组名(框的名字)
  11. 打印输出print
    key,array[key]

 

1.9.2 企业案例2计算各种IP的访问量

access_awk.log

 

1.10 awk相关保加利亚语计算

名称

含义

filed

域,区域,字段

record

记录,默认一整行

Filed Separator

FS:区域分隔符,表示一个区域的结束,字段,域

Number of Filed

NF:每一个记录中区域的数量

Record Separator

RS:记录分隔符,表示每个记录的结束

output filed separator

OFS

output Record Separator

ORS

awk当前处理的文件的记录号

FNR

[root@linux-node1 files]# seq 20 30 >20-30.txt

[root@linux-node1 files]# seq 50 60 >50-60.txt

[root@linux-node1 files]# awk ‘{print FNR,NR,$0}’ 20-30.txt 50-60.txt

1 1 20

2 2 21

3 3 22

4 4 23

5 5 24

6 6 25

7 7 26

8 8 27

9 9 28

10 10 29

11 11 30

1 12 50

2 13 51

3 14 52

4 15 53

5 16 54

6 17 55

7 18 56

8 19 57

9 20 58

10 21 59

11 22 60

第2章awk总结:

第2章awk总结:

2.1.找什么人干啥模块

 图片 5

图片 6

 

 

 

 

 

 

 

 

2.1.找什么人干啥模块

 图片 7

图片 8

 

 

 

 

 

 

 

 

2.2awk执行过程-完全

 图片 9

 

BEGIN模块输出一些指示性文字。awk内置变量FS,奥德赛S,O福睿斯S,OFS。

END 模块输出一些提醒性文字,彰显最终的结果,计算空行,awk数组,去苹果的经过把苹果显得处理。

awk里面的一般变量不用早先化。

awk先处理,一行一行的拍卖,然后END模块输出。

  1. 域与记录

FS指定种种各种的刀(正则表示),奥德赛S正则表明

 

  1. 形式匹配===》条件 怎么着找人。

正则表明式

^字符串开首

$字符串结尾

$3~/^http$/

–posix或 –re-interval

r{n,m}

协作精确,模糊

NR==1

NR>=2

方式暗许匹配 一行$0

$3~/^r/

awk ‘$3~/[4-6]/{print $0}’ passwd.txt

限制匹配

NR=2,NR=5   ==>2,5p

/start 地方/,/截至地方/

 

  1. 遇见正则表明式/ /
  2. $3~/reg/
  3. > = <
  4. NLAND==2,NMurano=5 /start地方/,/截至地点/

 

  1. awk数组

数组 ==>元素

一个筐==》苹果

图片 10

图片 11

图片 12

 

 

 

题材来源:

http://edu.51cto.com/course/course\_id-4319.html

 

2.2awk执行进程-完全

 图片 13

 

BEGIN模块输出一些提醒性文字。awk内置变量FS,景逸SUVS,O奔驰M级S,OFS。

END 模块输出一些指示性文字,展现最终的结果,计算空行,awk数组,去苹果的进度把苹果来得处理。

awk里面的平常变量不用早先化。

awk先拍卖,一行一行的处理,然后END模块输出。

  1. 域与记录

FS指定种种各类的刀(正则表示),科雷傲S正则表明

 

  1. 格局匹配===》条件 如何找人。

正则表明式

^字符串开首

$字符串结尾

$3~/^http$/

–posix或 –re-interval

r{n,m}

卓殊精确,模糊

NR==1

NR>=2

格局暗中认同匹配 一行$0

$3~/^r/

awk ‘$3~/[4-6]/{print $0}’ passwd.txt

界定匹配

NR=2,NR=5   ==>2,5p

/start 地方/,/停止地点/

 

  1. 遇到正则表明式/ /
  2. $3~/reg/
  3. > = <
  4. N瑞虎==2,N纳瓦拉=5 /start地方/,/甘休位置/

 

  1. awk数组

数组 ==>元素

一个筐==》苹果

图片 14

图片 15

图片 16

 

 

 

题材来源:

http://edu.51cto.com/course/course\_id-4319.html

 

3. 考试题

试验题1:处理以下文件内容,将域名取出并依照域名举行计数排序处理:(百度和sohu面试题)

oldboy.log

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.etiantian.org/2.html

答案 (4种)

#这里的

root@linux-node1 files]# awk -F “/” ‘{array[$3]++}END{for(key in
array) print key,array[key]}’ awkfile3.txt

[root@linux-node1 files]# awk -F “/+” ‘{array[$2]++}END{for(key in
array)print key,array[key]}’  awkfile3.txt

[root@linux-node1 files]#  cut -d / -f3 awkfile3.txt|sort|uniq
-c|sort -nrk2

[root@linux-node1 files]#  sort -t / -rk3 awkfile3.txt|awk -F /
‘{print $3}’|uniq -c

 

测验题2:统计公司工作中高并发web服务器差别网络连接状态对应的数据

[root@linux-node1 files]# netstat -ant|awk
‘NR>=3{array[$6]++}END{for(key in array)print key,array[key]}’
             

TIME_WAIT 134

SYN_SENT 1

ESTABLISHED 5

LISTEN 10

 

[root@linux-node1 files]# netstat -ant|awk ‘{print $6}’|uniq -c|sort
-nr

    138 TIME_WAIT

      7 LISTEN

      5 ESTABLISHED

      3 LISTEN

      1 Foreign

      1 established)

测验题3.分析图片服务日志,把日志(各种图片访问次数*图片大小的总数)名次,取top10,约等于一个钱打二15个结各个url的总访问大小【附加题:加分题】。

阐明:本题生产条件应用:那个效应可以用于IDC网站流量带宽很高,然后经过分析服务器日志哪些因素占用流量过大,进而举行优化或裁剪该图片,压缩js等方法。

焦点需要输出五个目的: 【访问次数】  
 【访问次数*单个文件大小】   【文件名(可以带U纳瓦拉L)】

测试数据

59.33.26.105 – – [08/Dec/2010:15:43:56 +0800] “GET
/staticphotos/2.jpg HTTP/1.1” 200 11299
http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

59.33.26.105 – – [08/Dec/2010:15:43:56 +0800] “GET
/staticphotos/2.jpg HTTP/1.1” 200 11299
http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

59.33.26.105 – – [08/Dec/2010:15:44:02 +0800] “GET
/static/flex/vedioLoading.swf HTTP/1.1” 200 3583
http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/\[\[DYNAMIC\]\]/2
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

124.115.4.18 – – [08/Dec/2010:15:44:15 +0800] “GET /?= HTTP/1.1” 200
46232 “-” “-“

124.115.4.18 – – [08/Dec/2010:15:44:25 +0800] “GET
/static/js/web_js.js HTTP/1.1” 200 4460 “-” “-“

124.115.4.18 – – [08/Dec/2010:15:44:25 +0800] “GET
/static/js/jquery.lazyload.js HTTP/1.1” 200 1627 “-” “-“

 

答案:

[root@linux-node1 files]# awk
‘BEGIN{print”URL:””\t””num:\t””total_size:”}{a[$7]++;b[$7]=$10}END{for(key
in a)print key”\t”a[key]”\t”a[key]*b[key]}’ images.log  

URL:    num:    total_size:

/?=     1       46232

/static/js/web_js.js    1       4460

/staticphotos/2.jpg     2       22598

/static/flex/vedioLoading.swf   1       3583

/static/js/jquery.lazyload.js   1       1627

明亮透上述难点并消除后,你将得以轻松解决如下增添的考查题:

壮大考试题1:

4.假设现行有个文件,格式如下:

a  1

b  3

c  2

d  7

b  5

a  3 

g  2

f  6

d  9

即左侧是随机字母,左侧是任意数字,须要写个脚本使其出口格式为:

a  4

b  8

c  2

d  16

f  6

g  2

就要相同的假名前面的数字加在一起,按字母的依次输出。

答案:

答案

[root@linux-node1 files]# awk ‘{if(!
a[$1]++)b[++n]=$1;c[$1]+=$2}END{for(i=1;i<=n;i++)print
b[i],c[b[i]]}’ a.txt

a 4

b 8

c 2

d 16

g 2

f 6

扩充考试题2:用shell处理以下内容

一,按单词出现频率降序排序!

二,按字母出现频率降序排序!

the squid project provides a number of resources to assist users
design,implement and support squid installations. Please browse the
documentation and support sections for more infomation

1.答案

[root@linux-node1 files]# sed -r ‘s#,| #\n#g’ b.txt|awk
‘{array[$0]++}END{for(key in array) print array[key],key}’|sort -r
         

2 the

2 support

2 squid

2 and

1 users

1 to

1 sections

1 resources

1 provides

1 project

1 of

1 number

1 more

1 installations.

1 infomation

1 implement

1 for

1 documentation

1 design

1 browse

1 assist

1 a

1 Please

1

 

 

 

2.答案

[root@linux-node1 files]# sed ‘s#[a-zA-Z]#& #g’ b.txt|awk
‘BEGIN{RS=” “}{arr[$1]++}END{for(i in arr) print arr[i],i}’|sort -nr
    

25

19 s

17 e

16 o

14 t

12 n

11 r

11 i

9 a

8 u

7 p

7 d

6 m

4 l

4 c

3 f

2 q

2 h

2 b

1 w

1 v

1 j

1 g

1 P

1 .

1 ,i

 

3. 考试题

试验题1:处理以下文件内容,将域名取出并依照域名进行计数排序处理:(百度和sohu面试题)

oldboy.log

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.etiantian.org/2.html

答案 (4种)

#这里的

root@linux-node1 files]# awk -F “/” ‘{array[$3]++}END{for(key in
array) print key,array[key]}’ awkfile3.txt

[root@linux-node1 files]# awk -F “/+” ‘{array[$2]++}END{for(key in
array)print key,array[key]}’  awkfile3.txt

[root@linux-node1 files]#  cut -d / -f3 awkfile3.txt|sort|uniq
-c|sort -nrk2

[root@linux-node1 files]#  sort -t / -rk3 awkfile3.txt|awk -F /
‘{print $3}’|uniq -c

 

考查题2:总括公司办事中高并发web服务器不一样网络连接状态对应的数目

[root@linux-node1 files]# netstat -ant|awk
‘NR>=3{array[$6]++}END{for(key in array)print key,array[key]}’
             

TIME_WAIT 134

SYN_SENT 1

ESTABLISHED 5

LISTEN 10

 

[root@linux-node1 files]# netstat -ant|awk ‘{print $6}’|uniq -c|sort
-nr

    138 TIME_WAIT

      7 LISTEN

      5 ESTABLISHED

      3 LISTEN

      1 Foreign

      1 established)

考查题3.分析图片服务日志,把日志(逐个图片访问次数*图片大小的总额)排名,取top10,相当于总括各种url的总访问大小【附加题:加分题】。

证实:本题生产条件应用:那个成效可以用于IDC网站流量带宽很高,然后经过分析服务器日志哪些因素占用流量过大,进而拓展优化或裁剪该图片,压缩js等格局。

宗旨要求输出多少个目标: 【访问次数】  
 【访问次数*单个文件大小】   【文件名(可以带U奥迪Q5L)】

测试数据

59.33.26.105 – – [08/Dec/2010:15:43:56 +0800] “GET
/staticphotos/2.jpg HTTP/1.1” 200 11299
http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

59.33.26.105 – – [08/Dec/2010:15:43:56 +0800] “GET
/staticphotos/2.jpg HTTP/1.1” 200 11299
http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

59.33.26.105 – – [08/Dec/2010:15:44:02 +0800] “GET
/static/flex/vedioLoading.swf HTTP/1.1” 200 3583
http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/\[\[DYNAMIC\]\]/2
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

124.115.4.18 – – [08/Dec/2010:15:44:15 +0800] “GET /?= HTTP/1.1” 200
46232 “-” “-“

124.115.4.18 – – [08/Dec/2010:15:44:25 +0800] “GET
/static/js/web_js.js HTTP/1.1” 200 4460 “-” “-“

124.115.4.18 – – [08/Dec/2010:15:44:25 +0800] “GET
/static/js/jquery.lazyload.js HTTP/1.1” 200 1627 “-” “-“

 

答案:

[root@linux-node1 files]# awk
‘BEGIN{print”URL:””\t””num:\t””total_size:”}{a[$7]++;b[$7]=$10}END{for(key
in a)print key”\t”a[key]”\t”a[key]*b[key]}’ images.log  

URL:    num:    total_size:

/?=     1       46232

/static/js/web_js.js    1       4460

/staticphotos/2.jpg     2       22598

/static/flex/vedioLoading.swf   1       3583

/static/js/jquery.lazyload.js   1       1627

清楚透上述难题并消除后,你将可以轻松化解如下扩充的试验题:

恢宏考试题1:

4.倘使现行有个公文,格式如下:

a  1

b  3

c  2

d  7

b  5

a  3 

g  2

f  6

d  9

即左侧是随机字母,左侧是不管三七二十一数字,需求写个脚本使其出口格式为:

a  4

b  8

c  2

d  16

f  6

g  2

将要相同的假名前面的数字加在一起,按字母的逐一输出。

答案:

答案

[root@linux-node1 files]# awk ‘{if(!
a[$1]++)b[++n]=$1;c[$1]+=$2}END{for(i=1;i<=n;i++)print
b[i],c[b[i]]}’ a.txt

a 4

b 8

c 2

d 16

g 2

f 6

扩大考试题2:用shell处理以下内容

一,按单词出现频率降序排序!

二,按字母出现频率降序排序!

the squid project provides a number of resources to assist users
design,implement and support squid installations. Please browse the
documentation and support sections for more infomation

1.答案

[root@linux-node1 files]# sed -r ‘s#,| #\n#g’ b.txt|awk
‘{array[$0]++}END{for(key in array) print array[key],key}’|sort -r
         

2 the

2 support

2 squid

2 and

1 users

1 to

1 sections

1 resources

1 provides

1 project

1 of

1 number

1 more

1 installations.

1 infomation

1 implement

1 for

1 documentation

1 design

1 browse

1 assist

1 a

1 Please

1

 

 

 

2.答案

[root@linux-node1 files]# sed ‘s#[a-zA-Z]#& #g’ b.txt|awk
‘BEGIN{RS=” “}{arr[$1]++}END{for(i in arr) print arr[i],i}’|sort -nr
    

25

19 s

17 e

16 o

14 t

12 n

11 r

11 i

9 a

8 u

7 p

7 d

6 m

4 l

4 c

3 f

2 q

2 h

2 b

1 w

1 v

1 j

1 g

1 P

1 .

1 ,i