awk
1. 解释
作用特点
排除信息
查询信息
统计信息
替换信息
语法格式:
awk [参数] ‘模式-动作’ 文件
2. 案例
2.1 NR 按照行号进行查找
awk 'NR==2' yang.txt
多行,连续
awk 'NR==2,NR==6' yang.txt
不连续
awk 'NR==2;NR==6' yang.txt
注意NR后边是两个等号
2.2 // 按照字符进行查找
awk '/yang/' yang.txt
awk '/yang/,/yu/' yang.txt
awk '/yang/;/yu/' yang.txt
2.3 显示xiaohu的姓氏和id号码 $进行取列
awk '/Xiaoyu/{print $1","$3}' yang.txt
awk '/Xiaoyu/{print $1,$3}' yang.txt
显示最后一列
awk '/Zhang/{print $NF}' yang.txt
2.4 -F 分割
分割:-F “:” 以:分隔符进行分割
awk '/Zhang/{print $NF}' awk_test.txt|awk -F ":" '{print $3}'
冒号空格进行分割
awk -F "[ :]+" '/^Zhang/{print $1,$2,$5}' awk_test.txt
awk -F "[ :]+" '/^Zhang/{print $1,$2,$(NF-1)}' awk_test.txt
2.5 案列对列的详细信息
显示所有以41开头的ID号码的人的全名和ID号码
awk '$3~/^41/{print $1,$2,$3}' yang.txt
显示所有ID号码最后一位数字是1或5的人的全名
awk '$3~/[15]$/{print $1,$2}' awk_test.txt|column -t
awk '$3~/[15]$/{print $1,$2}' awk_test.txt|column -t
awk '$3~/(1|5)$/{print $1,$2}' awk_test.txt|column -t
2.6 替换gsub
显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
gsub(/需要替换的信息/,"修改成什么信息",将哪列信息进行修改)
awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt
排除空行
rep -Ev "^#|^$" 文件信息
sed -n '/^#|^$/!p' 文件信息
awk '/^#|^$/'
2.7 begin() 执行命令之前做什么
awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}' awk_test.txt |column -t
修改内置分隔符变量
awk -F ":" '{print $2}' awk_test.txt
2.8 END{} 在awk执行命令结束之后做的操作
awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}END{print "操作结束"}' awk_test.txt |column -t
2.9 加法
普通用户数量
awk '$NF~/bash/{i=i+1}END{print i}' /etc/passwd
虚拟用户数量
awk '$NF!~/bash/{i=i+1}END{print i}' /etc/passwd