2021年11月18号 awk高级用法(上)

简介: 2021年11月18号 awk高级用法(上)

awk高级用法

if

awk -F: '{if($3>=1000)print $1,$3}' /etc/passwd

查看密码文件第三列大于1000的虚拟用户,并且输出序列号和主机名

awk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwd

查看最后有binbash的一行.并输出主机名称

awk '{if(NF>5) print $0}' /etc/fstab 

查看大于五行的挂载情况,并输出整行内容

awk -F: '{if($3>=1000){printf"common user:%s\n",$1}else{printf"root or sysuser:%s\n",$1}}' /etc/passwd

查看小于1000的输出系统或者root+主机名称,大于1000的输出虚拟+主机名称

awk -F: '{if($3>=1000) printf "common user: %s \n",$1; else printf "root or Sysuser :%s \n",$1}' /etc/passwd

查看小于1000的输出系统或者root+主机名称,大于1000的输出虚拟+主机名称(不用括号)

df -h|awk -F% '/^\/dev\/sd/{print $1}' |awk '$NF>=10{print $1,$5}'
df | awk -F"[[:space:]]+|%" '/^\/dev\/sd/{if($5>10)print $1,$5}'
awk "BEGIN{ test=100;if(test>90){print "very good"}else if(test>60){ print "good"}else{print "no pass"}}’

while

awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=10){print $i,length($i)};i++}}' /etc/grub2.cfg

查找首个为空行后边为linux16最后为其他字符的行,并且输出行后数据和对应的字符长度

do while:do做循环,while执行到特定目标停止

awk 'BEGIN{total=0;i=1;do{total+=i;i++}while(i<=100 );print total}'

从1+到100

For循环

awk 'BEGIN{total=0;for(i=1;i<=100;i++){total+=i};print total}'

1+100

awk '/^[[:space:]]*linux16/{for(i=0;i<=NF;i++){print $i,length($i)}}' /etc/grub2.cfg

查找首个为空行后边为linux16最后为其他字符的行,并且输出行后数据和对应的字符长度

其他写法

time(for((toule=0,i=1;i<=100000;i++))do let toule+=i;done;echo $toule)

break和continue

break结束整体循环

截止数

awk 'BEGIN{sum=0;for(i=1;i<=100;i++){if(i==50) break ; sum+=i}print sum}'

continue结束本次循环

取双数

awk 'BEGIN{sum==0;for(i=1;i<=100;i++){if(i%2==0) continue ; sum+=i}print sum}'

Next

结束本行的默认循环

取出第三列为偶数的数据并输出

awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd

数组

定义并打印输出

awk 'BEGIN{animal ["cat"] ="CAT";propel ["xiaoming"]="boy" ;print propel["xiaoming"]}'

数组

创建一个文件输入重复字符

去重复值或判断重读数量

awk '!line[$0]++' 123.txt
awk '{!line[$0]++;print $0,line[$0]}' 123.txt

数组分析

存在和不存在输出,存在输出1,不存在输出0

awk ' BEGIN{array["i"]="x"; array["j"]="y" ; print "i" in array, "y" in array}'

数组遍历

awk -F: ' {user[$1]=$3}END{for(i in user){print "username: "i, "uid: "user[i]}}' /etc/passwd
awk 'BEGIN { a["x"] = "wo" a["y"] = "ni" a["z"] = "ta" for(i in a){ print i,a[i] } }'

查看网络状态

ss -nta

查看进程统计

ss -nta >123.log
cat 123.log |sed -nr '1!s/^([^0-9]+) .*/\1/p'|sort |uniq -c
cat 123.log | awk 'NR!=1{abc[$1]++}END{for(i in abc){print i,abc[i]}}'
ss -ant | awk 'NR!=1{abc[$1]++}END{for(i in abc){print i,abc[i]}}'

网络进程

netstat -tan | awk '/^tcp/{abc[$NF]++}END{for(i in abc){print i,abc[i]}}'

查看ip

awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /etc/hostname

排序前十

sort -k2 -nr|head -10

二维数组

awk 'BEGIN {
 a[1][1] = 11
 a[1][2] = 12 
 a[1][3]=  13 
 a[2][1] = 21 
 a[2][2] = 22 
 a[2][3]=  23 
 for(i in a) 
 for(j in a[i]){ 
 print a[i][j] } }'


目录
相关文章
|
Shell 网络安全 Perl
2021年11月22号 awk高级用法(下)
2021年11月22号 awk高级用法(下)
128 0
|
人工智能 网络协议 Linux
2021年11月18号 awk高级用法(上)
本文均为本人实操整理,请勿搬运,学习交流可以随时评论---魏红斌
154 0
|
Shell Linux Perl
|
关系型数据库 Perl
|
Shell Docker Perl