shell编程:awk基础
语法格式:
一
awk
'BEGIN{}pattern{commands}END{}'
file_name
二
standard output | awk
'BEGIN{}pattern{commands}END{}'
基本格式
awk
'BEGIN{}pattern{commands}END{}'
BEGIN{} 文本处理前所做的处理
pattern{commands} 对文本具体的处理
END{} 文本处理后所做的处理
常用变量
最常用:
$0 整行
$1 首行
$ 末行
$NF 通常用于指定最后一个字段
FS 列分隔符(默认为空格)
RS 行分隔符(默认为换行)
NF 有多少列
实例
awk
'{print $0}'
passwd 输出整行内容
awk
'BEGIN{FS=":"}{print $1}'
passwd 输出所有行的第一个字段
awk
'{print NF}'
passwd 输出每一行的字段个数(多少列)
awk
'BEGIN{RS="--"}{print $0}'
list
RS 指定行分隔符: --
awk
'BEGIN{RS="--";FS="|"}{print $3}'
list
printf的用法
最常用
%s 字符串格式
%d 十进制格式
%f 浮点数格式
awk
'BEGIN{FS=":"}{printf "%s\n",$1}'
passwd 打印字符串,分隔符为":",打印后换行
awk
'BEGIN{FS=":"}{printf "%20s %20s\n",$1,$7}'
passwd 加入占位符美化,%20s表示占位20个字符
awk
'BEGIN{FS=":"}{printf "%-20s %-20s\n",$1,$7}'
passwd "-"表示左对齐
awk
'BEGIN{FS=":"}{printf "%0.2f\n",$3}'
passwd 打印浮点数,小数点后2位(默认小数点后4位)
awk的匹配模式
awk
'BEGIN{FS=":"}/root/{print $0}'
passwd
匹配passwd文件行中含有root字符串的所有行
awk
'/^nginx/{print $0}'
passwd
匹配passwd文件行中以nginx开头的所有行
运算符匹配
- < 小于
- > 大于
- <= 小于等于
- >= 大于等于
- == 等于
- != 不等于
- ~ 匹配正则表达式
- !~ 不匹配正则表达式
awk
'BEGIN{FS=":"}$3<50{print $0}'
passwd
以 : 为分隔符,匹配passwd文件中第3个字段小于50的所有行信息
awk
'BEGIN{FS=":"}$7=="/bin/bash"{print $0}'
passwd
以:为分隔符,匹配passwd文件中第7个字段为/bin/bash的所有行信息
awk
'BEGIN{FS=":"}$7!="/bin/bash"{print $0}'
passwd
以:为分隔符,匹配passwd文件中第7个字段不为/bin/bash的所有行信息
awk
'BEGIN{FS=":"}$3 ~ /[0-9]{3,}/{print $0}'
passwd
以:为分隔符,匹配passwd文件中第3个字段包含3个数字以上的所有行信息
布尔运算符匹配
- || 或
- && 与
- ! 非
awk
'BEGIN{FS=":"}$1=="ftp" || $1=="mail"{print $0}'
passwd
为分隔符,匹配/etc/passwd文件中包含ftp或mail的所有行信息
awk
'BEGIN{FS=":"}$3<50 && $4>50{print $0}'
passwd
以:为分隔符,匹配/etc/passwd文件中第3个字段小于50并且第4个字段大于50的所有行信息
awk
'BEGIN{FS=":"}/^nginx/{print $0}'
passwd
匹配包含 nginx开头 的行
awk
'BEGIN{FS=":"}$3==1{print $0}'
passwd
关系运算符,uid 等于1的行
awk
'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}'
passwd
匹配uid(数字)为3位及以上的行
awk
'BEGIN{FS=":"}$0!~/\/sbin\/nologin/{print $0}'
passwd
匹配不包含/sbin/nologin 的行
awk
'BEGIN{FS=":"}$3<50 && $7~/\/bin\/bash/ {print $0}'
passwd
找出 uid 小于50,且bash为 /bin/bash 的行
语法格式
第一种形式: 基于文件
1
|
awk 'BEGIN{}pattern{commands}END{}' file_name |
第二种形式: 基于标准命令格式
1
|
standard output | awk 'BEGIN{}pattern{commands}END{}' |
其他:https://www.cnblogs.com/crazymagic/p/11148894.html