6.常用的action:
(1)Expressions:表达式
(2)Control statements:if,while等:
(3)Compound statements:组合语句:
(4)input statements:输入语句;
(5)output statements:输出语句;
7.控制语句:
(1)if-else:
if(comdition) {statements}
awk -F: '{if($3>=500) print $1,$3}' /etc/passwd
if(comdition) {statements} else {statements}
awk -F: '{if($3>=500) {printf"Common user:%s\n",$1} else {printf"root or Sysuser:%s\n",$1}}' /etc/passwd
(2)while
while(comdition) {statements}
条件“真”,进入循环,条件“假”,退出循环,循环体可能一次也不会执行;
使用场景,队一行内的多个字段逐一类似处理时使用,对数组中的各元素逐一处理时使用;
(3)do-while循环;
do {statements} while(comdition)
意义:至少循环一次循环体
(4)for循环:
for(expr1;expr2;expr3) {statements}
特殊用法:能够遍历数组中的元素
awk '/^[[:space:]]*linux64/{for(i=1;i<=NF;i++){print $i,length($i)}}' /etc/grub2.cfg
(5)switch-case语句;
语法:switch(expression) {case VALUE1 or /REGXP/:statement;case VALUE2 or /REGXP/:statement;…..;default:statement}
(6)break和continue:
break [n]:结束当前循环
continue:
(7)next:
提前结束对本行的处理,直接进入下一行;
awk -F: '{if($3%2!=0) next;print $1,$3}' /etc/passwd
(8)array
关联数组:array[index-expression]
index-expression:
(1)可使用任意字符串;字符串要使用双引号;
(2)如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为"空串"。
若要判断数组中是否存在元素,要使用"index in array" 格式进行;
变量赋值:weekdays[mon]="Monday"
若要遍历数组中的每个元素,要使用for循环;
for(var in array){for-body}
awk ‘BEGIN{weekday=["mon"]="monday";weekday["tue"]="Tuesdays";for(i in weekday) {print}}'
awk '{ip[$i]++}END{for(i in ip) {print i,ip[i]}}' /varl/log/httpd/access_log
注意:var会遍历array的每个索引;
-tan | awk '/^tcp\>/{state[$NF]++}END{for(i in state){print i,state[i]}}'
delete array[index]
delete array
exit
8.函数:
(1)内置函数:
数值处理:
rand():返回0和1之间的一个随机数
字符串处理:
length([s]):返回指定字符串的长度
sub(r,s,[t]):以r表示的模式来查找t所表示的字符串中的匹配的内容,并将其第一次出现替换为s所表示的内容;
gsub(r,s,[t]):以r表示的模式来查找t所表示的字符串中的匹配的内容,并将其所有出现替换为s所表示的内容;
split(s,a,[r]):以r为分割符切割字符s,并将切割后的结果保存至a所表示的数组中;
(2)自定义函数: