awk是一种用于处理数据和生成报告的编程语言。
awk ‘pattern ’ filename
没有指定操作,则默认打印所有匹配pattern的记录。
awk ‘{action1;action2…}’ filenamey或
awk ‘{
action1
action2…
}’ filename
没有指定模式,则用action处理所有的记录。
awk ‘pattern {action}’ filename
模式匹配:
awk ‘/mary/’ file:打印所有包含mary的行。
操作:
awk ‘{print $1}’ file:打印第一列。
模式与操作的组合:
awk ‘/mary/{printf $1,$2}’ file1
awk ‘$1 ~ /mary/{printf $1,$2}’ file1
分隔符:
FS变量:保持了分段符的值,可以用-F选项修改。
awk –F ‘[:\t]’ ‘{printf $1}’ file1:用:\t作为分隔符
关系运算:
< > <= >= == != ~(匹配操作) !~(非匹配)
awk ‘$3 > 1{printf $2}’ file1
算术运算:
+ – * / % ^
awk ‘$1 * $2 > 100’ file
printf:
awk '{printf "|%013s%-12s\n", $1,$2}' file1:显示file1的内容,$1显示13个字符长度,默认右对齐,如果长度不够13字符的,用0填充。$2,显示12个字符,左对齐。
条件表达式:
awk ‘{max=($1 > $2) ? $1 : $2; printf max} file
逻辑运算:
&& || !
awk ‘$1 > 2 && $2 < 3’ file
范围匹配:
awk ‘/tom/,/suzanne/’ filename
awk将显示从tom首次出现的行道suzanne首次出现的行,包括两个行的边界在内。如果没有找到suzanne,awk打印到行尾,如果打印完tom和suzanne之间的内容后,如果还有Tom,则再次应用动作。
NR变量:每条记录的记录号都保持在NR变量中,每处理完一条记录NR就会加1
NF变量:保存记录中的字段数