wk[ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
awk -F: '$1~/\<12345\>/{print}' abc.txt
参数说明:
1)-F re:允许awk更改其字段分隔符。
2)parameter: 该参数帮助为不同的变量赋值。
3)'prog':awk的程序语句段。这个语句段必须用单引号:'和'括起,以防被shell解释。这个程序语句段的标准形式为:
'pattern{action}'其中pattern参数可以是egrep正则表达式中的任何一个,用//包括
,action参数总是被大括号包围,它由一系统awk语句组成,各语句之间用";"分隔。
awk用$0表示整个行(记录)。系统默认的分隔符是空格。awk允许在命令行中用-F re的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符。
例:显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段:
$awk -F % 'NR==7,NR==15{printf $1 $3 $7}' myfile
$awk'/[Ss]un/, /[Mm]oon/{print}'myfile
它将显示第一个匹配Sun或sun的行与第一个匹配Moon或moon的行之间的行(注意:!!),并显示到标准输出上。
例:下面的示例显示了内置变量和内置函数length()的使用:
$awk'length($0)>80{print NR}' myfile
例:作为一个较为实际的例子,我们假设要对UNIX中的用户进行安全性检查,方法是考察/etc下的passwd文件,检查其中的passwd字段(第二字段)是否为"*",如不为"*",则表示该用户没有设置密码,显示出这些用户名(第一字段)。我们可以用如下语句实现:
#awk-F: '$2=="\*"{printf("%s no password!\n",$1}' /etc/passwd
awk中允许进行多种测试,如常用的==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、>=(小于等于)等等,同时,作为样式匹配,还提供了~(匹配于)和!~(不匹配于)判断。
在awk中两个特别的表达式,BEGIN和END,这两者都可用于pattern中(参考前面的awk语法),提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。
例:累计销售文件xs中的销售金额(假设销售金额在记录的第三字段):
$awk
>'BEGIN{ FS=":";print "统计销售金额";total=0}
>{print$3;total=total+$3;}
>END{printf "销售金额总计:%.2f",total}' sx
(注:>是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,则需在行尾加反斜杠)
^在字符串的开头开始匹配
$在字符串的结尾开始匹配
.与任何单个字符串匹配
[ABC]与[]内的任一字符匹配
[A-Ca-c]与A-C及a-c范围内的字符匹配(按字母表顺序)
[^ABC]与除[]内的所有字符以外的任一字符匹配
Desk|Chair与Desk和Chair中的任一个匹配
[ABC][DEF]关联。与A、B、C中的任一字符匹配,且其后要跟D、E、F中的任一个字符。
*与A、B或C中任一个出现0次或多次的字符相匹配
+与A、B或C中任何一个出现1次或多次的字符相匹配
?与一个空串或A、B或C在任何一个字符相匹配
(Blue|Black)berry合并常规表达式,与Blueberry或Blackberry相匹配
\{\}
\<\>
\(\)
awk的内置函数
函数用途或返回值
------------------------------------------------
gsub(reg,string,target)每次常规表达式reg匹配时替换target中的string
index(search,string)返回string中search串的位置
length(string)求串string中的字符个数
match(string,reg)返回常规表达式reg匹配的string中的位置
printf(format,variable)格式化输出,按format提供的格式输出变量variable。
split(string,store,delim)根据分界符delim,分解string为store的数组元素
sprintf(format,variable)返回一个包含基于format的格式化数据,variables是要放到串中的数据
strftime(format,timestamp)返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间
sub(reg,string,target)第一次当常规表达式reg匹配,替换target串中的字符串
substr(string,position,len)返回一个以position开始len个字符的子串
tolower(string)返回string中对应的小写字符
toupper(string)返回string中对应的大写字符
srand(x)初始化随机数发生器。如果忽略x,则使用system()
system()返回自1970年1月1日以来经过的时间(按秒计算)