基本格式:
awk+ options(选项)+ ‘{ program }’(执行程序内容)+ file
其中 program 通常由:(BEGIN)、通用、(END)三部分组成,
BEGIN与END的决定动作语句分别是文件处理前执行一次、文件处理后执行一次。
注意:awk是对文件逐行顺序进行执行
Options:
1. -v FS=“符号”(等同于 - F“符号”)
表示将指定文件中的字段分隔符作为打印字符
2. -v OFS=“符号”
表示设定打印内容字段分隔符
3. -v RS=“符号”
表示将指定文件中的字段分隔符作为换行字符
4. -v ORS=“符号”
表示设定打印内容的换行分隔符
Program:
一、基础运用:
1. 在{print}中,NF表示以设定的字段分隔符分隔成的字段数量
2. 其中 $0 表示 逐行打印文件全部内容
3. $1,$2,$3,…… 表示逐行打印以设定的字段分隔符分成的第几段,$(NF-数字)表示意思同上
4. NR 表示打印显示每行行号
5. 可定义变量进行引用:
‘{var=value;print var}’等同于 –v var=value‘{print var}’
6. 条件表达式(三目表达式)
Selector?if-true-expression:if-false-expression
判断语句?为真描述信息:为假描述信息
7. 可根据 /regular expression/ 格式正则表达式来处理匹配的行
其中regular expression 在 真 的情况下,才会处理
真:非空字符,非0值
8. 奇数行打印: awk ‘n=!n’(sed -n ‘1~2p’)
偶数行打印: awk ‘!(n=!n)’(sed -n ‘2~2p’)
二、控制语句运用模式:
1. if -- else
if(condition条件){statement描述}else{statement描述}
可进行多重if判断
2. while
while(condition条件){statement描述}
条件为“真”,进行循环
3. for
for(variable assignment;condition;iteration process){statement描述}
(变量赋值;条件判断;变量叠加)
4. switch
switch(expression表达式){case value数值 or /REGEXP/:statement描述;……;default:statement描述}
三、数组:
1. array[“字符串”]=“设定字符” 若某数组元素不存在,则awk会自动创建,并赋值为“空”。
2. for(var in arry变量在数组中循环提取){for-body循环体}
可以遍历数组中的每个元素
四、函数:
1. length(字符串)返回指定字符串的长度
2. sub(r,s,n)
表示对字符串n 以r模式搜索匹配到的第一个内容替换为s表示内容
gusb(r,s,n)则表示全部替换
3. split(r,array,n)
表示以n代表的分隔符,切割字符串n,并将切割结果保存至array数组中,下标为1,2,3………
4. 自定义函数格式:
将函数写入文件file
function name(parameter参数,……){
Statement 描述
return expression 返回表达式值
}
BEGIN{print name(需要执行的变量)}
使用 awk -v 指定变量 -f file
(实参:“需要执行的变量”和 函数中 形参:“参数”一一对应)
调用shell命令:
1.system
system(除awk中的变量外其他变量需要使用双引号)
2.将program 部分写成脚本,加上执行权限,格式如下:
vim filename
#!/bin/awk –f
{statement描述信息}
chmod +x filename加上执行权限
filename -F指定分隔符 +“指定变量”+ 被执行文件