当前位置:网站首页>shell脚本——“三剑客”之awk命令
shell脚本——“三剑客”之awk命令
2022-07-28 05:28:00 【渔火鳅】
shell脚本——“三剑客”之awk命令
一、awk
1、工作原理
逐行读取文本,默认以空格或TAB键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。
awk信息的读入也是逐行读取的,执行结果可以通过print的功能将数据字段打印显示。
在使用AWK命令的过程中,可以使用逻辑操作符"&&“表示"与”、"||"表示“或”、“!”表示“非”;还可以进行简单的数学运算,比如+ - * / % ^,分别表示加减乘除取余和乘方
2、命令格式
awk 选项 ‘模式或条件{操作}’ 文件1 文件2…
awk -f 脚本文件 文件1 文件2 …
3、awk常见的内建变量(可直接用)

4、按行输出文本
awk ‘{print}’ testfile2 #输出所有内容
awk ‘{print $0}’ testfile2 #输出所有内容
awk ‘NR1,NR3{print}’ testfile2 #输出第1~3行内容
awk ‘(NR>=1)&&(NR<=3) {print}’ testfile2 #输出第1~3行内容
awk ‘NR1||NR3{print}’ testfile2 #输出第1行、第3行内容
awk ’ (NR%2)==1{print}’ testfile2 #输出所有奇数行的内容
awk ’ (NR%2)==0{print}’ testfile2 #输出所有偶数行的内容
awk ‘/^root/{print}’ /etc/passwd #输出以root 开头的行
awk ‘/nologin$/{print}’ /etc/passwd #输出以nologin 结尾的行
awk 'BEGIN {x=0};//bin/bashKaTeX parse error: Expected 'EOF', got '#' at position 40: …tc/passwd #̲统计以/bin/bash结尾的…" /etc/passwd
BEGIN模式表示,在处理指定文本之前,需要执行BEGIN模式中指定的动作,命令只执行一次;
awk再处理指定的文件,之后再执行END模式中指定的动作,END{}语句块中,往往会放入打印结果等语句。





5、按字段输出文本’:’
awk -F “:” ‘{print $3}’ /etc/ passwd #输出每行中(以空格或制表位分隔)的第3个字段
awk -F “:” ‘{print $1,$3}’ /etc/passwd #输出每行中的第1、3个字段
awk -E “:” ‘$3<5{print $1,$3}’ /etc/passwd #输出第3个字段的值小于5的第1、3个字段内容
awk -F “:” ‘!($3<200) {print}’ /etc/passwd #输出第3个字段的值不小于200的行
awk 'BEGIN {FS=”:"}; {if($3>=1000) {print}}’ /etc/passwd #先处理完BEGIN的内容,再打印文本里面的内容
awk -F “:” ‘{max=($3>=$4)?$3:$4;{print max}}’ /etc/ passwd
#($3>$4) ?$3:$4三元运算符,如果第3个字段的值大于等于第4个字段的值,则把第3个字段的值赋给max, 否则第4个字段的值赋给max
awk -F “:” ‘{print NR,$0}’ /etc/passwd #输出每行内容和行号,每处理完一条记录,NR值加1
awk -F “:” ‘$7~“/bash”{print $1}’ /etc/passwd #输出以冒号分隔且第7个字段中包含/bash的行的第1个字段
awk -F “:” ‘($1~“root”)&& (NF==7) {print $1,$2}’ /etc/passwd #输出第1个字段中包含root且有7个字段的行的第1、2个字段
awk -F “:” '($7!=”/bin/bash")&&($7!=“/sbin/nologin”) {print}’ /etc/passwd
#输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行





6、通过管道、双引号调用shell命令
1、echo $PATHI awk ‘BEGIN{RS=“:”}; END{print NR}’ #统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句
2、awk -F: '/bashKaTeX parse error: Expected 'EOF', got '#' at position 37: …etc/passwd #̲调用wc -l命令统计使用ba…" /etc/passwd
3、free -m | awk ’ /Mem:/ {print int ($3/ ($3+$4) *100)“%”}’ #查看当前内存使用百分比
4、top -b -n 1 | grep Cpu | awk -F ‘,’ ‘{print $4}’ | awk ‘{print $1}’ #查看当前CPU空闲率,(-b -n 1表示只需要1次的输出结果)
date -d “$(awk -F “.” ‘{print $1}’ /proc/uptime) second ago” +“&F %H:%M:%S”
#显示上次系统重启时间,等同于uptime; second ago为显示多少秒前的时间,+“%F %H: %M: %S"等同于+”%Y-%m-%d %H: %M: %S"的时间格式
awk ‘BEGIN {n=0 ; while ("w” 1 getline) n++ ; {print n-2}}’ #调用w命令,并用来统计在线用户数
awk ‘BEGIN {“hostname” | getline ; {print $0}}’ #调用hostname, 并输出当前的主机名
当getline左右无重定向符“<”或“1”时,awk首 先读取到了第一-行, 就是1,然后getline,就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF,NR,FNR和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。
当getline左右有重定向符“<”或“|”时,getline则作用 于定向输入文件,由于该文件是刚打开,并没有被awk读入- -行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
seq 10 | awk ‘{getline; print $0}’
seq 10 | awk ‘{print $0; getline}’
CPU使用率
cpu_us=top -b -n 1 | grep Cpu | awk '{print $2}
cpu_sy=top -b -n1 | grep Cpu | awk -F ',‘ ’{print $2}' | awk '{print $1}'
Cpu_sum=$ (( c p u u s + cpu_us+ cpuus+cpu_sy))
echo $cpu_ sum
echo “A B C D” | awk '{OFS=“|”;print $0;$1=$1;print $0} ’
A B C D
A|B|C|D
$1=$1是用来激活$0的重新赋值,也就是说
字段$1…和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做
OFS=“|”;print $0;$1=$1;print $0} ’
A B C D
A|B|C|D
$1=$1是用来激活$0的重新赋值,也就是说
字段$1…和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做
边栏推荐
- prometheus监控nacos
- SSH服务配置
- [C language] dynamic memory management
- Yapi vulnerability hanging horse program chongfu.sh processing
- Which brand of air conduction earphones is good and highly praised
- Hdu-2036-reform spring breeze blowing all over the ground (polygon area template)
- Which brand of air conduction earphones is better? These four should not be missed
- Network - transport layer (detailed version)
- 进程和线程的区别
- [realize the simple version of minesweeping games]
猜你喜欢

cocos2d-x 学习笔记——瓦片地图TiledMap

Technology sharing | detailed explanation of actual combat interface test request methods get, post

Using C language to realize three piece chess games

Vmware workstation configuration net mode

What is the most practical gift for Tanabata? A gift that will never go wrong is worth buying

prometheus监控nacos

技术分享 | 使用postman发送请求

Analysis of reentrantlock source code of AQS

设计测试用例的方法

Analysis of the semaphore source code of AQS
随机推荐
技术分享 | 服务端接口自动化测试, Requests 库的这些功能你了解吗?
OSI七层模型
Technology sharing | sending requests using curl
PKU-2524-Ubiquitous Religions(并查集模板)
Technology sharing | how to simulate real use scenarios? Mock technology to help you
Source code analysis of countdownlatch of AQS
HDU-1097-A hard puzzle(快速幂)
Which is the best one to make air conduction headphones? Inventory of the best air conduction headphones
JS four operations are repackaged to solve the problem of precision loss
Initializingbean interface and examples
rancher部署实战
mongo ssl 配置实战
Yapi vulnerability hanging horse program chongfu.sh processing
On cookies and session
Ubuntu18.04搭建redis集群【学习笔记】
Mongodb replica set and partitioned cluster
Difference between process and thread
Which is the best air conduction Bluetooth headset? Air conduction Bluetooth headset ranking
MySQL master master
HDU-5805-NanoApe Loves Sequence(思维题)