您的位置:首页 > 运维架构 > Linux

linux中的awk

2015-10-09 10:03 597 查看
awk是一个强大的文本日志处理软件,在操作系统的层面执行的。效率非常高。awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk '{print $3}' flow-info.log

$后面的数字表示第几个域,每个域之间是用空格作为分隔的。用单引号将动作扩起来,后面接文件名称。

awk 通常运行的模式是这样的:

[root@www ~]# awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

条件类型也就是模式,过滤条件等,大括号中的内容就是动作。

[align=left]#打印第一和第四个域[/align]
$
awk '{print $1,$4}' grade.txt

先来总结一下awk内置变量:

[align=left]ARGC 命令行参数个数[/align]
[align=left]ARGV 命令行参数排列[/align]
[align=left]ENVIRON 支持队列中系统环境变量的使用[/align]
[align=left]FILENAME awk浏览文件名[/align]
[align=left]FNR 浏览文件的记录数[/align]
[align=left]FS 设置输入域分隔符,等价于命令行-F选项[/align]
[align=left]NF 浏览记录的域个数[/align]
[align=left]NR 已读的记录数[/align]
[align=left]OFS 输出域分隔符[/align]
[align=left]ORS 输出例句分隔符[/align]
[align=left]RS 控制记录分隔符[/align]

正则表达式相关

[align=left]为使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式,也可以用 i f语句。awk中if后面的条件用()括起来。[/align]
[align=left]#下面代码打印$4 包含 Brown 的行[/align]
$
awk '$4~/Brown/ {print $0}' grade.txt

[align=left]#非精确匹配[/align]

$
awk '$3 ~/48/ {print $0}' grade.txt
[align=left]M.Tansley 05/99 48311 Green 8 40 44[/align]
[align=left]P.Bunny 02/99 48 Yellow 12 35 28[/align]

[align=left] [/align]
[align=left]#精确匹配[/align]

$
awk '$3=="48" {print $0}' grade.txt
[align=left]P.Bunny 02/99 48 Yellow 12 35 28[/align]

[align=left][/align]

[align=left]#不匹配 使用 ‘!~’[/align]

$
awk '$0 !~ /Brown/' grade.txt
[align=left]M.Tansley 05/99 48311 Green 8 40 44[/align]
[align=left]J.Lulu 06/99 48317 green 9 24 26[/align]
[align=left]P.Bunny 02/99 48 Yellow 12 35 28[/align]

[align=left] [/align]

$
awk '$4 != "Brown-2" {print $0}' grade.txt
[align=left]M.Tansley 05/99 48311 Green 8 40 44[/align]
[align=left]J.Lulu 06/99 48317 green 9 24 26[/align]
[align=left]P.Bunny 02/99 48 Yellow 12 35 28[/align]
J.Troll 07/99 4842 Brown-3 12 26 26

[align=left]#设置大小写[/align]

$
awk '/[Gg]reen/' grade.txt
[align=left]M.Tansley 05/99 48311 Green 8 40 44[/align]
J.Lulu 06/99 48317 green 9 24 26

'或'匹配,使用 ‘|’ ,需使用括号括起来

$
awk '$0 ~/(Yellow|Brown)/' grade.txt
[align=left]P.Bunny 02/99 48 Yellow 12 35 28[/align]
[align=left]J.Troll 07/99 4842 Brown-3 12 26 26[/align]

$
awk '{print NF,NR,$0} END {print FILENAME}' grade.txt
[align=left]7 1 M.Tansley 05/99 48311 Green 8 40 44[/align]
[align=left]7 2 J.Lulu 06/99 48317 green 9 24 26[/align]
[align=left]7 3 P.Bunny 02/99 48 Yellow 12 35 28[/align]
[align=left]7 4 J.Troll 07/99 4842 Brown-3 12 26 26[/align]
[align=left]7 5 L.Tansley 05/99 4712 Brown-2 12 30 28[/align]
[align=left]grade.txt[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: