awk '模式'
awk '{action}'
awk '模式{action}' ( awk -F. '$1=="192"{print $0}' )
模式:是由某种类型的表达式组成,表达式中没有出现if,但是计算时却暗含if这个词。
所有的操作都在{}中,如果没给出,则采用默认操作,打印包含模式的行。
awk 工作原理
1) awk 使用一行作为输入,并将这一行赋值给内部变量$0
2) 行被空格分解成字段,每个字段存储在已经编号的变量中,从$1开始,多大100字段。
3) awk如何知道空格是用来分隔字段的呢?因为有另外一个内部变量FS用来确定字段的分隔符。初始化时,
FS被默认为空格(制表符和空格)。如果需要使用其他的字符,FS重新复制就行了, 用 -F 改变分隔符 awk -F: '{xxx}'
1) 每次处理完一天记录NR的值就加1
2) awk在NF中保存记录的字段数
3) 对awk而言,正则表达式是置于两个正斜杠之间的模式。
4) 范围模式
例子: awk '/Tome/,/linwen/'
从Tom首次出现到linwen首次出现的所有行,如果没linwen,就一直到文件。
在linwen之后又出现Tome则从开头开始。
5) BEGIN 模式在读入数据行之前执行,后面跟一个操作块。 BEGIN {print "PGM begin"}
6) END 模式在处理完所有行之后处理, ( awk -F. 'BEGIN{print "begin"} $1=="192"{print $0} END{print "END"}' )
7) 重定向:
输出重定向,重定向的目标文件必须用双括号括起来。如 awk '{print $0 > "out.file"}'
8) 管道: 如果在awk中打开了管道,就必须先关闭它才能打开另一个管道,管道符右边命令被
双括号括起来。如 awk '{print $1,$2 | "sort -r +1"}'
关闭 close("sort -r +1")
9) awk '{print $0}'
awk -F. '{print $1}' ' 前面有个空格
10) awk -F. 'BEGIN{print "begin"} $1=="192"{print $0;print length($0)} END{print "END"}' ; 为分隔符,