三剑客之格式化筛选输出--awk
# awk linux的文本报告生成器(格式化文本),linux上是gawk
# awk [options] '模式 {动作}' [file]
# awk 参数 '条件动作' 文件
# awk '{print $1,$2,$3}' file 默认以空格为分割符号
# $0 表示完整输入记录,$NF表示当前分割后的最后一列,$(NF-1)倒数第二列
# 正则
# awk '/正则表达式/动作' file
# awk -F ":" '/^games/{print $1,$NF}' file
# 模式
# BEGIN模式是在文件开始之前执行,处理文本之前要执行的操作,可以定义变量,也可以定义函数
# END模式是处理完所有行之后执行的操作
# 内置变量
# FS 字段分隔符,默认为空格
# RS 记录分隔符,默认为换行符
# NF 分割后,当前行一共有多少个字符
# NR 当前处理的行数,记录数
# OFS 输出字段分隔符,默认为空格
# ORS 输出记录分隔符,默认为换行符
# awk参数
# -F 指定分割符号
# -v 定义或修改一个awk内部的变量
# -f 从脚本文件中读取awk命令

1.打印出当前系统中所有普通用户的用户和家目录(/etc/passwd)
cat /etc/passwd | awk -F ':' '$3>=1000{print $1,"\t\t",$(NF-1)}'
# -F 指定分割符号
# $3 第三组数据
# $NF-1 倒数第二组数据
# $3>=1000 UID大于1000为普通用户
2.给文件的前5行添加#号
awk 'NR<6{print "#",$0}' pwd.txt
# $0 当前行的所有数据
# NR 当前处理的行数
3.统计文本信息
# 格式
# Chet Main:[510] 543-3421:39:44:123
# 截取电话号
awk -F '[ :]' '!/^$/{print $4}' pwd.txt
# [ :] 以空格和冒号分割文本
# !/^$/ 剔除空格空行
# 截取姓为M开头的电话号码
awk -F '[ :]' '$2~/^M/{print $2,$4}' pwd.txt
# ~ 匹配正则
# 显示所有区号为510的人们
awk -F "[ :]" "$3~/\[510\]/{print $1}" pwd.txt
# 显示Chet的捐款信息,在每一项前加上美元符号
awk -F "[ :]" '/^Chet/{print "$"$(NF-2),"$"$(NF-1),"$"$NF}' pwd.txt
# 获取姓名,中间用逗号分割
awk -F "[ :]" -v OFS="," '!/^$/{print $2,$1}' pwd.txt
# -v 修改内部变量
# OFS 输出字段分隔符,默认为空格
4.删除文件的空白行
awk '!/^$/' pwd.txt