/***************************************************************************/
awk的内置变量
awk 'BEGIN{}pattern{command}END{}'
总结:内置变量
$0 打印出行所有信息
awk '{print $0}' /etc/passwd
$1-$n 打印行的第1到n个字段的信息
awk 'BEGIN{FS=":"}{print $1}' /etc/passwd
NF (Number Field) 处理行的字段个数
awk '{print NF}' list
NR (Number Row) 处理行的行号
awk '{print NR}' list /etc/passwd 后面指定的文件行数累加
FNR (File Number Row) 多文件处理时,每个文件单独记录行号
awk 'print FNR' list /etc/passwd
FS (Filed Separator) 字段分割符,不指定时默认以空格或tab键做分割
awk 'BEGIN{FS="|"}{print $2}' list
RS 行分割符,不指定时以回车换行分割
awk 'BEGIN{FS="|";RS="---"}{print $2}' list
OFS (Output Filed Separator) 输出字段分割符
awk 'BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}' list
ORS (Output Row Separator) 输出行分隔符
awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $3}' list
FILENAME 处理文件的文件名
awk '{print FILENAME}' list
ARGC 命令行参数的个数
awk '{print ARGC}' list
ARGV 命令行参数数组
awk格式化输出之printf总结
%s 打印字符串
%d 打印10进制数
%f 打印浮点数
%x 打印16进制数
%o 打印8进制数
%e 打印数字的科学计数法格式
%c 打印单个字符的ASCII码
修饰符
- 左对齐
+ 右对齐
# 显示8进制在前面加0 显示16进制在前面加0x
格式示例:
1、以字符串格式打印/etc/passwd中的第七个字段
awk 'BEGIN{FS=":"}{printf "%s",$7}' /etc/passwd
2、以10进制格式打印/etc/passwd中的第三个字段,以":"作为分隔符
awk 'BEGIN{FS=":"} {printf "%d\n",$3}' /etc/passwd
3、以浮点数格式打印/etc/passwd中的第三个字段,以":"作为分隔符
awk 'BEGIN{FS=":"} {printf "%f\n",$3}' /etc/passwd
4、以16进制数格式打印/etc/passwd中的第三个字段,以":"作为分隔符
awk 'BEGIN{FS=":"} {printf "%x\n",$3}' /etc/passwd
5、以8进制格式打印/etc/passwd中的第三个字段,以":"作为分隔符
awk 'BEGIN{FS=":"} {printf "%o\n",$3}' /etc/passwd
6、以科学计数法格式打印/etc/passwd中的第三个字段,以":"作为分隔符
awk 'BEGIN{FS=":"} {printf "%e\n",$3}' /etc/passwd
修饰符示例:
1左对齐格式
2右对齐格式
3打印8进制或者16进制是在前面加#
/********************************************************************************/
awk模式匹配用法总结:
①、RegExp
②、运算符匹配
1、RegExp
匹配/etc/passwd文件中含有root字符串的所有行
awk 'BRGIN{FS=":"}/root/{print $0}' /etc/passwd
匹配/etc/passwd文件行中以yarn开头的所有行
awk 'BRGIN{FS=":"}/^yarn/{print $0}' /etc/passwd
2、运算符匹配
关系运算符匹配
< 小于
> 大于
<= 小于等于
>= 大于等于
== 等于
!= 不等于
~ 匹配正则表达式
1、以:为分隔符,匹配/etc/passwd文件中第3个字段小于50的所有行信息
awk 'BEGIN{FS=":"}$3<50{print $0}' /etc/passwd
2、以:为分隔符,匹配/etc/passwd文件中第3个字段大于50的所有行信息
awk 'BEGIN{FS=":"}$3>50{print $0}' /etc/passwd
3、以:为分隔符,匹配/etc/passwd文件中第7个字段为/bin/bash的所有行信息
awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' /etc/passwd
4、以:为分隔符,匹配/etc/passwd文件中第7个字段不为/bin/bash的所有行信息
awk 'BEGIN{FS=":"}$7!="/bin/bash" /etc/passwd
5、以:为分隔符,匹配/etc/passwd文件中第3个字段包含3个以上数字的所有行信息
awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}' /etc/passwd
布尔运算符匹配
|| 或
&& 与
! 非
1:以:分隔符,匹配/etc/passwd文件中包含hdfs或者yarn的所有行信息
awk 'BEGIN{FS=":"}$1=="hdfs"||$1=="yarn"{print $0}' /etc/passwd
2:以:分隔符,匹配/etc/passwd文件中第三个字段小于50并且第四个字段大于50的所有行信息
awk 'BEGIN{FS=":"}$3<50 && $4>50{print $0}' /etc/passwd
awk的基本运算
+ 加
- 减
* 乘
/ 除
% 取模
^或** 乘方
++x 在返回x变量之前,x变量加1
x++ 在返回x变量之后,x变量加1
--x 在返回x变量之前,x变量减1
x-- 在返回x变量之后,x变量减1
1 使用awk计算/etc/services中空白的行数量
2 计算学生课程分数的平均值 学生课程文件如下
3 使用awk输出/etc/passwd文件的行数 分两种方式进行显示行数
网友评论