grep:文本过滤器
sed:流编辑器
awk:报告生成器
1、awk的输出:
awk 'BEGIN {print "line one\nline two\nline three"}'
awk -F: '{print $1,$2}' \etc\passwd
printf
%c 显示字符的ASCII码
%d %i 十进制整数
%e %E 科学计数法显示数值
%f 显示浮点数
%g %G 以科学计数法的格式或浮点数的格式显示数值
%s 显示字符串
%u 无符号整数
%% 显示%自身
修饰符
N 显示宽度
- 左对齐
+ 显示数值符号
awk -F: '{printf "%-15s %E\n",$1,$2}' /etc/passwd
2、awk的变量
内置变量:
FS:列分隔符
RS:行分隔符
OFS:输出的列分隔符
ORS:输出的行分隔符
NR:命令所处理的记录数(行数),多个文件的总处理数
NF:命令所处理的列数
FNR:命令所处理的当前文件的记录数(行数)
两种定义变量方式:
awk -v var="test" 'BEGIN{print var}'
awk 'BEGIN{var="test";print var}'
3、awk的操作符
算数操作符:
-x 负值
+x 转换为数值
x^y
x**y 次方
x+y
x-y
x*y
x/y
x%y
字符串操作符
赋值操作符
=,+=,-=,*=,/=,%=,^=,**=,++,--
布尔值
任何非0值或非空字符串都为真,反之为假
<,<=,>,>=,==,!=,~,!~,subscript in array
逻辑关系
&&,||
条件表达式
selector?if-true-exp:if-false-exp
函数调用
function_name(para1,para2)
4、awk的模式
常见模式类型:
Regexp:正则表达式,格式为/regular expression/,如:awk -F: '/^r/{print $1}' /etc/passwd
expression:表达式,其值非0或为非空字字符时满足条件,如:$1 ~ /foo/ 或 $1 == "test"
Ranges:指定匹配范围,格式为pat1,pat2,如:$3==0,$7^"nologin"
BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次
Empty:空模式,匹配任意输入行
常见的Action
Expressions:
Control statements:
Compound statements:
Input statements:
Output statements:
5、控制语句
if (condition) {then-body} else {[else-body]}
awk -F: '{if ($1=="root") print $1,"Admin"; else print $1,"Common User"}' /etc/passwd
while (condition){statement1;statement2;...}
awk -F: '{i=1;while (i<=3) {print $i;i++}}' /etc/passwd
do {statement1;statement2;...} while (condition)
awk -F: '{i=1;do {print $1;i++}while(i<=3)}' /etc/passwd
for (variable assignment;condition;iteration process) {statement1;statement2;...}
awk -F: '{for(i=1;i<=3;i++) {print $i}}' /etc/passwd
switch (expression) {case VALUE or /REGOEXP/:statement1;statement2;... default:statement1;statement2;...}
break,continue
常用语switch中
next
提前结束对本行文本的处理,并接着处理下一行
6、awk中使用数组
array[index-expression],默认下标从1开始
遍历数组
for (var in array) {statement1;statement2;...}
netstat -tan | awk '/^tcp/{STATE[$NF]++}END{for(S in STATE) {print S,STATE[S]}}'
转载于:https://blog.51cto.com/techli/1354993