|
awk
【语法】
awk 【option】 pattern action filename
program:pattern+action
如果action中有多个语句,需要用;分隔
eg:awk 'BEGIN{test="hello gawk";print test}'
1、print
print item1,item2, ...
1)逗号分隔符
2)输出的各item可以是字符串,也可以是数值:当前记录的字段、变量或awk的表达式
3)如省略item,相当于print $0;
2、变量
在awk中引用变量是不需要使用$的,注意使用$和不使用$的区别
2.1 內建变量
FS:input field separator,默认为空白字符
OFS: output field separator,默认为空白字符
RS:input record separator,默入时的换行符
ORS:output record separator,输出时的换行符
eg:
awk 'BEGIN{FS=":";OFS="\t"}NR==1{print $1,$2}' /etc/passwd
awk -v FS=":" -v OFS="\t" 'NR==1{print $1,$2}' /etc/passwd
NF:number of field,字段数量
{print NF},{print $NF}
NR:number of record,行数
FNR:各文件分别计数:行数
FILENAME
awk '{print FILENAME}' /etc/fstab
ARGC:命令行参数的个数
awk 'BEGIN{print ARGC}' /etc/fstab
ARGV:保存的是命令行所给定的各参数
awk 'BEGIN{print ARGV[1]}' /etc/fstab
2.2自定义变量
1)变量名区分大小写
-v var=value
awk -v test="hello gawk" '{print test}' /etc/fstab
awk -v test="hello gawk" 'BEGIN{print test}'
2)在pattern中直接定义
awk 'BEGIN{test="hello gawk";print test}' 3)在action中直接定义,不同命令之间用;和在pattern中定义是有区别的
awk '/^title/{i=1;print $0}' /etc/grub.conf 3、printf命令
格式化输出:printf FORMAT,item1,item2,...
1)FORMAT必须给出
2)不会自动换行,需要显示给出换行控制符 \n
3)FORMAT中需要分别为后边的每个item指定一个格式化符号
格式符:
%c:显示字符的ASCII码
%d,%i:显示十进制整数
%e,%E:科学计数法数值显示
%f:显示为浮点数
%g,%G:以科学计数法或浮点形式显示数值
%s:显示字符串
%u:无符号整数
%%:显示%自身
eg:
awk '{printf "%s\n",$1}' /etc/fstab
awk '{printf "username:\t%s\n",$1}' /etc/fstab
awk '{printf "filesytem:\t%s\tsize:\t%d\n",$1,$2}' /etc/fstab
修饰符:
number[.number]第一个数字控制显示的宽度:第二个数字表示小数点之后的精度
%3.1f
-:左对齐
+:显示数字的符号
eg:
awk '{printf "filesytem:\t%15s\tsize:\t%d\n",$1,$2}' /etc/fstab (默认是右对齐)
*注意和上图的区别
awk '{printf "filesytem:%-15s\tsize:\t%d\n",$1,$2}' /etc/fstab (左对齐结果)
4、操作符
算术操作符
x+y,x-y,x*y,x/y,x^y,x%y
-x
+x:把一个字符串转换为数值
字符串操作符:没有符号的操作符,表示字符串连接
赋值操作符:
=,+=,-=,/=,%=,*=
++,--
比较操作符
>,>=, |
|
|