简明awk实战演练
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简明awk实战演练相关的知识,希望对你有一定的参考价值。
简明awk实战演练
1 awk是什么?
AWK is a programming language designed for text processing and typically used as a data
extraction and reporting tool. It is a standard feature of most Unix-like operating systems.
from AWK - Wikipedia
awk是一门编程语言,主要大量应用类unix系统中。它可以对文本以及标准输入的内容进行处理,处理完后可以
通过一定的格式输出。不同于grep,awk不仅仅可以行处理,也可以列处理;不仅仅支持程序语句,也支持数组。
awk功能非常强大,如果你想把shell编程玩的非常好的话,awk是你必须要掌握的一门编程语言。
2 awk的工作原理
工作流程:[ BEGIN{actions} ]-->输入数据流-->[ pattern‘{actions}‘ ]-->[ END{actions}]
注:[ ]表示[]内的内容是可选的。
awk的执行步骤
第一步:执行BEGIN{actions}语句块中的语句
第二步:awk从文件或者标准输入中读取一行,然后执行pattern{actions}语句块。它逐行扫描文件,先
读取行,再执行语句块,一直循环这个过程,直到所有的行被读取完成。
第三步:输入流被读读取完成后,执行END{actions}语句块
[ BEGIN{actions} ],见名知意,输入流数据开始之前要执行的语句块。此语句块是可选的。在文本未读
取之前执行的操作,你可以在这个语句块定义变量的初始值,打印一些信息等等。
END{actions},见名知意,输入流数据结束之后执行的语句块。它也是一个可选项。一般在这里可以放置
分析结果的汇总信息。
[ pattern‘{actions}‘,见名知意,对输入流数据执行模式匹配并且语句块操作。你可以把这两者合并理
解为程序,即对输入流数据进行处理程序。它也是一个可选项。这部分是awk语句中核心的内容,默认是执行打印操
作(打印行所有的内容)。
awk使用的基本格式:
awk [options] [BEGIN{actions}] [ pattern‘{actions}‘ ] [ END{actions} ] file
可以看出awk由四大部分 option选项、BEGIN语句块、模式匹配的语句块、END语句块。需要注意的是
[ pattern‘{actions}‘中的语句块,通常被单引号括起来。
awk支持的功能:
1.支持自定义变量以及包含非常强大的内置变量
可以使用选项-v自定义变量,也可以在三大语句块中定义变量,不过awk其内置的变量相当强大,可以帮助
awk实现字段分隔(FS),字段数量的统计(NF),行号标记(NR),字段内容处理($0,$1,$2...)。$0表示所有字段
的内容,$1表示第一个字段的内容,$2表示第二个字段的内容。另外FS英文field of separator 的意思,字段分隔
符的意思,而NF则为number of field是字段数量的意思,统计的是每行字段数的个数,NR则为number of record,
是行数的意思。大家对于内置变量没必要死记硬背,用到的时候查询官方文档即可。
2.支持打印功能
通过print或者printf可以将输入流数据打印。通过我们用它打印我们需要的字段的信息,而不是整行的信
息。如果你想美观的输出信息,可以使用printf,printf为格式化输出命令,支持很多的格式符,格式符基本也与c
语言中的格式符相同。
3.支持各种操作符
算术操作符。即加减乘除等符号。+ - * /
赋值操作符。即= += -= *= /= ++ --等等
比较操作符。即== >= <= !=等等
4.支持模式匹配
这个相当重要。我们可以自己决定匹配的模式,从而打印出我们认为重要的信息。
4.1支持正则表达式的模式匹配:/(此处正则表达式)/
4.2支持关系表达式:即结果为真,就处理;否则,就不处理。
4.3支持行范围匹配:/part1/,/part2/ part1,part2为你自定义的行匹配的模式
4.4支持模式匹配符~。表示左边的内容是否被右边所匹配。
5.支持逻辑操作符。即&& || ! 与或非。
6.支持BEGIN/END模式。可以在输入流数据开始前或结束后执行操作。
7.支持编程语句(if,while,for,switch,break,continue,next)
这也是awk真正强大的地方,也是它可以被称为一门独立的编程语言的基础。我们可以在语句块,编写自己
需要的程序,去筛选我们需要的信息。
8.支持数组,函数
和一般的编程语言一样,也支持数组,函数。数组在awk中应用相当强大。
3 awk实战演练(由易到难)
3.1 演示知识点:awk支持管道标准输入,自定义变量,打印功能
:注意:awk中引用自定义变量不需要加$符号
[[email protected] ~]#echo | awk ‘{var1="v1";var2="v2";var3="v3"} {print var1,var2,var3}‘
v1 v2 v3
3.2 演示知识点:内置变量$1,$2...,打印字段内容
[[email protected] ~]#cat file
one two three
one two three
one two three
one two three
打印行中的第二以及第三个字段
[[email protected] ~]#awk ‘{print $2,$3}‘ file
two three
two three
two three
3.3 演示知识点:支持BEGIN/END模式
[[email protected] ~]#echo -e "line1\nlien2" | awk ‘BEGIN{print "start"} {print} END{print "END"}‘
start
line1
lien2
END
在执行输入流数据处理前打印字符串,
在执行输入流数据处理后打印字符串
3.4 演示知识点:特殊内置变量:NR,NF,$1,$2...
[[email protected] ~]#echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk ‘{print "Line no:"NR",
No of fileds:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3}‘
Line no:1,No of fileds:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line no:2,No of fileds:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line no:3,No of fileds:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
NR:行号
NF:当前行的字段数
$1:所在行的第一个字段的内容
$2:所在行的第二个字段的内容
$2:所在行的第三个字段的内容
3.5 演示知识点:选项-F(自定义字段分隔符)
awk -F: ‘{print $1,$3}‘ /etc/passwd
[[email protected] 0520]#awk -F: ‘{print $1,$3}‘ /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
...
3.6 演示知识点:选项-V重复使用,内置变量FS,OFS
[[email protected] 0520]#awk -v FS=":" -v OFS="###" ‘{print $1,$3}‘ /etc/passwd
root###0
bin###1
daemon###2
adm###3
lp###4
sync###5
shutdown###6
halt###7
选项-V重复使用,可以定义多个变量
FS:自定义输入字段分隔符
OFS:自定义输出字段符
此演示案例:将输入分隔符:换为###
3.7 演示知识点:printf格式化输出
awk -F: ‘{printf "username:%-10s UID:%d\n",$1,$3}‘ /etc/passwd
[[email protected] 0520]# awk -F: ‘{printf "username:%-10s UID:%d\n",$1,$3}‘ /etc/passwd
username:root UID:0
username:bin UID:1
username:daemon UID:2
username:adm UID:3
username:lp UID:4
username:sync UID:5
username:shutdown UID:6
username:halt UID:7
username:mail UID:8
3.8 演示知识点:综合应用,模式匹配,split函数,语句
[[email protected] 0520]#netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for(i in
count){print i,count[i]}}‘
10.0.0.1 1
0.0.0.0 5
4 awk总结
本文主要介绍awk的简介,awk的基本原理以及awk的大量实战演练。
awk支持的功能非常多,非常复杂。我们需要通过大量的练习,才能够真正熟练操作awk编程。多多练习,必将玩转
awk编程。
时间:2017/05/21
作者: Michael
本文出自 “完成比完美更重要” 博客,请务必保留此出处http://powermichael.blog.51cto.com/12450987/1927930
以上是关于简明awk实战演练的主要内容,如果未能解决你的问题,请参考以下文章