说明:这里记述的是awk实际是gawk. 文件来自于
unxutils.sourceforge.net
使用环境:WINXP,CMD
用途:awk是用来对文本数据按行(记录)来处理,通过表达式匹配来过滤生成新的文本.
命令:
例1
大体有两种执行模式,上面写的是命令行模式.
-F 这个参数用来指定记录的分隔符,相当于JAVA里的split方法的第二个参数的作用.
这里例子是一个冒号 , 也可以是其它,
"/.../ {...}" 这个第二部分是重点, 前一部分用来写正则, 后一部分用来写处理,主要是出力方式.
注意, 上面的正则指的是如果这一行记录包含这一个正则匹配项的话,就执行后面.
而不是一行记录完全和它匹配.
infile.txt
这个应该猜到了,就是入力文件.
几个特殊变量
%0 指这一整条记录.
%1, %2, .... 指在 -F 参数指定的情况下,这条记录被分成的组员,从左向右,记为%1,%2,%3...
NF 该条记录被分成的组员数量,
NR 当前的记录号(行号)
默认的记录分隔符是换行符,所以上面写的时候,把记录和行等同起来了,这只是一般情况.
例2
这是另外一种执行方式 ,通过 -f 参数,把写好的awk脚本引进来,再对infile.txt进行处理.
下面是一个脚本的例子
由BEGIN,中间,END三部分组成. 其中 BEGIN是初期化变量和定义分隔符信息的地方.
第二部分不重述
第三部分是终了处理.
其中BEGIN,和END的前后,注意有分号隔开.
这个写法有点类似于SQLPLUS的表头,表尾出力.
上面说到记录分隔符,其实在BEGIN里面,就是由RS来指定的,这里的是""表示空行.即有一个空行出行,
进行下一条记录的处理.
相似的,FS是来指定字段分隔符的.这里的是换行符.
总结:
在*NIX下awk的表达式是由单引号括起来的,不过在WIN下面是用双引号.
而在{}里面再要用双引号时,要用转义符了.即/"
例如: awk -F "<$$$>" "{print /" This is line :/" NR /" has /" NF /" words /" }"
PS
awk -F : " $1 ~ /..../ && $2 > 28 {print}" infile 这是一个复合条件的用法. 其实很简单
使用环境:WINXP,CMD
用途:awk是用来对文本数据按行(记录)来处理,通过表达式匹配来过滤生成新的文本.
命令:
例1
C:
>
awk
-
F :
"
/[0-9]*/ {print $0}
"
infile.txt
大体有两种执行模式,上面写的是命令行模式.
-F 这个参数用来指定记录的分隔符,相当于JAVA里的split方法的第二个参数的作用.
这里例子是一个冒号 , 也可以是其它,
"/.../ {...}" 这个第二部分是重点, 前一部分用来写正则, 后一部分用来写处理,主要是出力方式.
注意, 上面的正则指的是如果这一行记录包含这一个正则匹配项的话,就执行后面.
而不是一行记录完全和它匹配.
infile.txt
这个应该猜到了,就是入力文件.
几个特殊变量
%0 指这一整条记录.
%1, %2, .... 指在 -F 参数指定的情况下,这条记录被分成的组员,从左向右,记为%1,%2,%3...
NF 该条记录被分成的组员数量,
NR 当前的记录号(行号)
默认的记录分隔符是换行符,所以上面写的时候,把记录和行等同起来了,这只是一般情况.
例2
C:
>
awk
-
f my.awk infile.txt
这是另外一种执行方式 ,通过 -f 参数,把写好的awk脚本引进来,再对infile.txt进行处理.
下面是一个脚本的例子
BEGIN
{
FS="/n"
RS=""
x = 0
} ;
/ [ 0 - 9 ] +/ {x++} ;
END {
print "count:" x
}
FS="/n"
RS=""
x = 0
} ;
/ [ 0 - 9 ] +/ {x++} ;
END {
print "count:" x
}
由BEGIN,中间,END三部分组成. 其中 BEGIN是初期化变量和定义分隔符信息的地方.
第二部分不重述
第三部分是终了处理.
其中BEGIN,和END的前后,注意有分号隔开.
这个写法有点类似于SQLPLUS的表头,表尾出力.
上面说到记录分隔符,其实在BEGIN里面,就是由RS来指定的,这里的是""表示空行.即有一个空行出行,
进行下一条记录的处理.
相似的,FS是来指定字段分隔符的.这里的是换行符.
总结:
在*NIX下awk的表达式是由单引号括起来的,不过在WIN下面是用双引号.
而在{}里面再要用双引号时,要用转义符了.即/"
例如: awk -F "<$$$>" "{print /" This is line :/" NR /" has /" NF /" words /" }"
PS
awk -F : " $1 ~ /..../ && $2 > 28 {print}" infile 这是一个复合条件的用法. 其实很简单