日期:2014-05-16  浏览次数:20747 次

leeboy的linux学习七

awk正则表达式及内置函数:

1、模糊匹配:awk '{if($3~/97/) print $0}' data.f:如果第三项中含有”97”则打印该行

                             awk '{if($4!~/ufcx/) print $0}' data.f:如果第三项中不含ufcx有则打印

2、精确匹配:awk '{if($5==66) print $0}' data.f:如果第五项是66则打印

awk '{if($5!=66)print $0}' data.f : 如果第五项不是66则打印

awk '{if($1>$5) print $0}' data.f:如果第一项大于第五项则打印

3、大小写匹配:awk '{if(/[Ss]ept/) print $0}' data.f:符合,则打印一行。

awk '/[Ss]ept/ {print $2}' data.f:符合,则打印第二字段

 4、任意匹配:awk '{if($2 ~/^.e/) print $0}' data.f:第二字段中,第二个字符为e,输出

                              awk '{if($4 ~/(lps|fcx)/) print $0}' data.f:第四个字段含有lpsfcx则输出

 5&&||

awk '{if($3 ~/1993/ && $2=="sept") print $0}' data.f:两边都真则输出

awk '{if($3 ~/a9/ || $2=="sept") print $0}' data.f:一边为真则输出

 6、变量定义:

awk '{date=$2;price=$5; if(date ~/[Ss]ept/) print "price is " price}' data.f:变量定义,满足datesept或者Sept的将price输出。

 7、修改数值(源文件数值不变)

awk '{BASELINE=42; if($1>BASELINE) $5=$5+100; print $0}' data.f:三行程序,以“;”分割

如果修改的是文本域,就要添加“”””。例如:awk '{if($2=="may") $2="tt"; print $0}' data.f

上边都是显示所有数据,awk '{if($2=="may") {$2="tt"; print $0}}' data.f这个只显示修改数据,仔细看看,其实语法和c一样,只是最外边添加了一个{}符号。