awk概念介绍说明:
擅长分析文件内容,擅长对文件中的列进行操作
作用特点:
1.排除信息
2.查询信息
3.统计信息
4.替换信息
1)命令查询信息方法
1.按照行号查询信息:
awk 'NR==2' awk_test.txt ---查询单行
awk 'NR==2,NR==4' awk_test.txt ---查询连续多行
awk 'NR==2;NR==4' awk_test.txt ---查询不连续行
2.按照字符查询信息
awk '/Xiaoyu/{print $1,$3}' awk_test.txt
awk '/Xiaoyu/,/Waiwai/' awk_test.txt
awk '/Xiaoyu/;/Waiwai/' awk_test.txt
测验:01.显示Xiaoyu的姓氏和ID号码
awk '/Xiaoyu/{print $1,$3}' awk_test.txt
02.姓氏是Zhang的人,显示他的第二次捐款金额及他的名字
awk -F "[ :]+" '/^Zhang/{print $1,$2,$(NF-1)}' awk_test.txt
03. 显示所有以41开头的ID号码的人的全名和ID号码
awk '$3~/^41/{print $1,$2,$3}' awk_test.txt
04. 显示所有ID号码最后一位数字是1或5的人的全名
方法一:awk '$3~/1$|5$/{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
05. 显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
gsub(/需要替换的信息/,"修改成什么信息",将哪列信息进行修改)
awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt
06.文件中空行进行排除/文件中注释信息进行排除
grep -Ev "^#|^$" 文件信息
sed -n '/^#|^$/!p' 文件信息
awk '$0!~/^$/' awk_test.txt
总结:awk命令中$符号用法
$1 $2 $3 : 取第几列信息
$NF : 取最后一列
$(NF-n) : 取倒数第几列
$0 : 取所有列的信息
如何利用awk取出IP地址信息:
ip a s eth0|awk -F "[ /]+" 'NR==3{print $6}'
hostname -i
特殊的模式
BEGIN{} 在awk执行命令前做什么事情:
awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}' awk_test.txt |column -t
修改内置分隔符变量
awk -F ":" '{print $2}' awk_test.txt
END{} 在awk执行命令结束之后做的操作
awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}END{print "操作结束"}' awk_test.txt |column -t
统计累加运算测试:
01. 统计/etc/services文件中空行数量
awk '/^$/{i=i+1}END{print i}' /etc/services
02. 统计/etc/services文件中有井号开头的行
awk '/^#/{i++}END{print i}' /etc/services
03. 统计系统中有多少个虚拟用户 普通用户
awk '$NF~/bash/{i=i+1}END{print i}' /etc/passwd
63
虚拟用户数量
awk '$NF!~/bash/{i=i+1}END{print i}' /etc/passwd
22
求和运算:
sum=sum+$n(需要进行数值求和的列)
seq 10|awk '{sum=sum+$1;print sum}'