awk的使用及printf 格式输出
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,1基础用法awk -F: '{print$1}' /etc/passwd #显示passwd 的用户名 awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/pa
千家信息网最后更新 2025年12月01日awk的使用及printf 格式输出
1基础用法
awk -F: '{print$1}' /etc/passwd #显示passwd 的用户名 awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/passwd #显示出shell为 "/bin/bash" 的用户 awk 'BEGIN{print"开头"}{print$0}END{print"结束"}' /etc/passwd #BENGIN可以理解为页头,END理解为页脚 df -h|awk -F% '/^\/dev/{print $1}'|awk '{if($5>=20)print $1,$5"%"} #先匹配dev,应为dev开头的才是真正挂载的找出磁盘空间大于20%的,思路先用%切成两段,把第一段管道给后面,这是$5已经取出想要的值了,进行比较大于20就输出 awk '{FS=":";OFS="---"}{print NR,$1,$2,$3}' /etc/passwd #以:为定界,---为输出定界符2.AWK if的使用
awk -F":" '{if($1=="root")print$0}' /etc/passwd #单if使用,第一个字段内容等于"root"就显示。 awk -F":" '($1=="root"){print$0}' /etc/passwd #另一种写法,和上面一样,不用带if 用()就可以了 awk -F":" '{if($1=="root")next}{print$0}' /etc/passwd #单if使用,第一个字段等于"root"就跳过,显示后面的,和上面正好显示相反的 #next 本次直接跳过,exit直接退出,但是有EOF还是要执行EOF的内容awk -F: '{if(NR>=2&&NR<=10)print $1}' /etc/passwd #and的用法,表示显示第2到10行数据 awk -F: '{if(NR==2||NR==10)print $1}' /etc/passwd #or的用法,表示显示第2和第10行 awk -F: '{if(NR!=2)print $1}' /etc/passwd #取反的用法,除了第二行,其他都显示 awk -F: '{if($3<=500){print$1,$3,"系统用户"}else{print$1,$3,"普通用户"}}' /etc/passwd #双分支使用,以ID号为参数,大于500的输出为系统用户 ,其他输出为普通用户 实战 df -h|awk -F% '/^\/dev/{print $1}'|awk '{if($5>=20)print $1,$5"%"}'#功能,找出磁盘空间已用大于%20的,思路先用%切成两段,把第一段管道给后面,这是$5已经取出想要的值了,进行比较大于20就输出3.AWK 变量的使用及内置变量
awk -v x=$z -F" " NR==x'{print$0}' /etc/ansible/hosts#awk 不能直接调用变量,需要用-v 声明下变量,变量z是shell里面的,x是awk内部的,把z变量赋值给x,x就能在后面调用了,调用无需其他符号直接使用echo "$*"|awk -v y=$y -F" " '{print $y}'#在{prinf } 内存引用变量 ,必须用'' 单引号,双引号不可以 AKW取反 echo "1 2 3 4" |awk -F" " '{$1="";print$0}' #会显示 2 3 4 echo "1 2 3 4" |awk -F" " '{$NF="";print$0}' #显示1 2 3 echo "10.1.1.1"|awk -F"." '{print NF}'#查看有几个字段数echo "10.1.1.1"|awk -F"." '{print $NF}'#查看最后一个字段的内容awk '{FS=":";OFS="***"}{print NR,$1,$2,$3}' /etc/passwd#以:分隔符,以"***"为显示分隔符,显示行号及$1 $2 $34.BEGIN和END
awk -F":" 'BEGIN{print"用户""\t""ID"}{if($3<5)print$1"\t"$3}END{print"结束"}' /etc/passwd#BENGIN和END可以理解为页眉页脚,美化输出的BEGIN的几种循环写法awk 'BEGIN{for(i=0;i<=5;i++){print i}}'awk -v i=0 'BEGIN{ while(i<=5){print i;i++}}'awk 'BEGIN{i=0;while(i<=5){print i;i++}}'awk 'BEGIN{i=7;do{print"测试"i;i++}while(i<5)}'几种循环的写法,最后一种do是无论条件满足否都会执行一次一种高级用法
cat /etc/fstab |awk '/^UUID/||/^\/dev/{fs[$3]++}END{for(i in fs){print i,fs[i]}}'
黄色表示匹配出UUID或者 /dev开头的行,红色以$3的字段名为数组的索引每次对数组的值加1,数组的值无需初始化默认为0,蓝色以数组的索引作为循环列表,显示i i就是$3的里的内容,fs[i]是每次累加最后统计的和
5.printf格式化输出
awk -F: '{printf "%-20s %-3s %-1s\n",$1,$2,$3}' /etc/passwd#$1对应"%-20s",$2对应"%-1s",$3对应"%-1s\n","% s" %和s是固定格式 -表示左对齐默认右对齐 20表示显示字符不足20个用空格补全到20个字符其他例子printf "%s %s %s %s %s\n" a b c d e f g h i j表示每个%s 对应这一个值输出,像这个格式位有5个,有10个值,正好输出会输出成两排printf "%-10s %-8s %-4.3f\n" 郭芙 女 47.9876%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f 指格式化为小数,其中.2指保留2位小数。6.作用范围之正则表达式
awk -F":" '/\/bin\/bash/{print $1}' /etc/passwd#表示只匹配到"bin/bash"的,才处理awk -F":" '!/\/bin\/bash/{print $1 $7}' /etc/passwd#加个!号取反,匹配到"bin/bash"的不处理,其他都处理awk -F":" '/\/bin\/bash/||/\/bin\/csh/{print $1 $7}' /etc/passwd#表示匹配到"/bin/bash","/bin/csh"才处理awk -F":" '/\/bin\/bash|\/bin\/csh/{print $1 $7}' /etc/passwd#和上面一样,只不过上面是||的写法,这个是|的写法
输出
变量
字符
内容
写法
字段
格式
数组
处理
开头
用户
循环
分隔符
小数
引号
思路
磁盘
空格
空间
管道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何提取服务器权限
上网本web服务器
网络安全的护卫
oracle数据库基表
如果网络安全实名制
萤火突击连接服务器卡在90
数据库join和from谁优先
北京数据网络技术分类推广
通俗了解超聚变服务器
平安健康科技互联网事业群
山东系统软件开发需要多少钱
仙桃哪里有软件开发
华三全国网络技术大赛
千年打开登录器看不见服务器列表
网络安全防护可转为固定资产吗
网络安全身份认证系统
数据库中成绩
湖北电商网络安全维护条件
黄浦区创新数据库收费标准
网易网络安全部门联系方式
深圳应用软件开发公司排名
数据库to char
网络安全拼多多
初中学计算机网络技术的学习
溧水区个人软件开发专业服务
山东系统软件开发需要多少钱
数据中心网络技术指标
网络安全等保测评整改清单
舟山软件开发招聘
南海视频软件开发