用户工具

站点工具


侧边栏

linux三剑客:awk

awk介绍

awk 擅长对列进行操作/进行数据信息的统计

作用特点:

  1. 排除信息
  2. 查询信息
  3. 统计信息
  4. 替换信息

语法格式:

awk [参数] ‘模式-动作’ 文件

查询方法

命令:

-F定义分隔符
-v设置变量
NF最后一列

$符号用法:

符号 用法
$1 $2 $3取对应列
$NF 最后一列
$(NF-n) 取倒数第几列
$0 取所有列的信息

按单多行查询

单行NR==,多行区间用”,“,指定行之间分隔用”;”

#查询第二行
awk 'NR==2' awk_test.txt
#查询二到六行
awk 'NR==2,NR==6' awk_test.txt
#查询第二行和第六行
awk 'NR==2;NR==6' awk_test.txt

字符查询

多行查询同行查询,“,”与”;”

awk '/Xiaoyu/' awk_test.txt

字符筛选

筛选结果之间的连接符号

awk '/Xiaoyu/{print $1,$3}' awk_test.txt
Zhang 390320151
awk '/Xiaoyu/{print $1","$3}' awk_test.txt
Zhang,390320151

指定分隔符”-F”

awk -F ":" '/^Zhang/{print $3}' awk_test.txt 

如果行中同时存在多个不同分隔符-F” :”

#Zhang    Dandan        41117397    :250:100:175
awk -F "[ :]+" '/^Zhang/{print $1,$2,$5}' awk_test.txt
#取倒数第二列$(NF-1)
awk -F "[ :]+" '/^Zhang/{print $1,$2,$(NF-1)}' awk_test.txt

在某列中筛选,输出其他列信息

#显示所有以41开头的ID号码的人的全名和ID号码
#在第三列中匹配41开头的结果,并显示第1,2,3列信息
awk '$3~/^41/{print $1,$2,$3}' awk_test.txt
#显示所有ID号码最后一位数字是1或5的人的全名
awk '$3~/1$|5$/{print $1,$2}' awk_test.txt
awk '$3~/[15]$/{print $1,$2}' awk_test.txt|column -t
awk '$3~/(1|5)$/{print $1,$2}' awk_test.txt|column -t

替换方法

gsub(/需要替换的信息/,“修改成什么信息”,将哪列信息进行修改)

在print之前,先替换,再输出

#显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt

awk高级功能说明

awk模式概念

匹配的条件信息

普通的模式:

  • 正则表达式作为模式
awk '/^oldboy/{print xx}'
  • 利用比较匹配信息
NR==2
NR>=2
NR<=2

特殊的模式

BEGIN{}在awk执行命令前做什么

  • 增加标题
awk 'BEGIN{print "姓名","QQ号","记录"}{print $0}' awk_test.txt | column -t
  • 修改内置分隔符变量
awk 'BEGIN{FS=":"}{print $2}' awk.txt

END{}在命令结束后进行的操作

最后显示信息

awk 'BEGIN{print "姓名","QQ号","记录"}{print $0}END{print "操作结束"}' awk.txt|column -t

统计空行

awk '/^$/{i++}END{print i}' /etc/services

统计系统中多少普通用户,虚拟用户

#普通用户
awk '$NF~/\/bin\/bash/{i++}END{print i' /etc/passwd
#虚拟用户,取反即可
awk '$NF!~\/bin\/bash/{i++}END{print i}' /etc/passwd

求和运算

seq 10 |awk '{sum=sum + $1;print sum}'

内置变量

变量名英文 意义
FS field separator 字段分隔符变量
NR number records 表示行号信息
NF number of fields表示每一行有多少列
linux三剑客/awk.txt · 最后更改: 2022/07/13 21:29 由 pwbty