awk用法

awk
#############################2021.12.7################################################
/regex/
expression
parttern1,parttern2
BEGIN	#先执行BEGIN然后再执行{action}
END		#执行玩{action}再执行END


如果使用数字不加双引号 
[root@rocky tmp]# cat /tmp/sn | awk '{print 3*3}' 
9
9


awk 显示文本
$0代表没有被分割,整行
命令格式
awk [option] 'script' file1 file2
awk [option] 'pattern{action}' file1 file2
parttern  关系表达式,结果为“真”才会被处理
真:结果为非0值,非空字符串
假:结果为空字符串或0值
parttern表示方法  BEGIN{}   END{}
		用文件字符与正则表达式元字符描述的条件,
	1.正则表达式
	awk -F: '/^(r|s)/{print $1}'
	awk -F: '!/^#/{print $1}'  取反
	awk -F" +|%" 	多分隔符
	awk -F"[[ ]"       [[ ](外边的中括号代表[或者空格的意思)
	2.运算
	+ - * / % …… **
	3.赋值
	++  x++ x=x+1
	--  x-- x=x-1
	4.比较操作符
	x < y
	x <= y
	x > y
	x >=y
	x == y
	x != y
	x ~ y  x为字符串,y为模式,如果x可以被模式匹配条件为真, 例 "abc" ~ ^a
	x !~ y 
	5.逻辑关系符
	&&
	||
	6.指定范围
	  awk -F: '$3==0,$7~"nologin$"{print $1}' /etc/passwd 
action
	FS  等于-F
	OFS 指定显示的分割标记
	RS  指定已什么来分割行
	ORS 指定
	NR 记录awk所处理的文本的行数,如果有多个文件,所以文件统一进行计数   #这俩处理多个文件才会有区别
	FNR 记录awk所处理的文本的行数,如果有多个文件,分别记录 			 #这俩处理多个文件才会有区别
	NF 记录awk正在处理的当前行被分割成几个字段
	print
	printf  指定输出项的格式,格式必须写
	 格式  printf format,item1,item2
	 要点 
		printf输出时必须制定format格式
		printf语句不会自动换行,需要加\n
	 format=%修饰符s
	 %c 显示单个字符
	 %d,%i 十进制整数
	 %f 显示浮点数
	 %g,%G 以科学计数法的格式或者浮点数的格式显示数值
	 %s 显示字符串
	 %u 无符号证书
	 %% 显示%自身
	 修饰符
	 N 显示宽度,N为数字
	 - 左对齐,默认右对齐
	 + 显示数值符号
	
option选项
		-F 指定文件分割符
		-v 变量名="变量"
function 函数
length() 例 awk -F: '{if(length($1)<=4) print $1}' /etc/passwd
system() 条用linux命令 例 awk 'BEGIN{system("hostname")}'
IF
if(condition){statement;…}[else statement]
if(condition1){statement1}else if(condition2){statement2}else if(condition3)
{statement3}...... else {statementN}

while
while (condition) {statement;…}
条件“真”,进入循环;条件“假”,退出循环
使用场景:
对一行内的多个字段逐一类似处理时使用
对数组中的各元素逐一处理时使用

for(expr1;expr2;expr3) {statement;…}
------------------------------------------------------------------------------------------
awk -F: '{if($3>=1000)print $1,$3}' /etc/passwd
awk -F: '{if($3<=100){print "<=100",$3}else if ($3<=1000) {print "<=1000",$3} 
else{print ">=1000",$3}}' /etc/passwd
awk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwd
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
awk -F: '{if($3>=1000) printf "Common user: %s\n",$1; else printf "root or 
Sysuser: %s\n",$1}' /etc/passwd
df -h|awk -F% '/^\/dev\/sd/{print $1}'| awk '$NF>=80{print $1,$5}'
df | awk -F"[[:space:]]+|%" '/^\/dev\/sd/{if($5>80)print $1,$5}'
[root@centos8 ~]#df | awk -F' +|%' '/^\/dev\/sd/{if($5>=10)print $1,$5}'
/dev/sda1 15
awk 'BEGIN{ test=100;if(test>90){print "very good"}
 else if(test>60){ print "good"}else{print "no pass"}}'
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd 
next取模2不等于0就是1(奇数的意思) $3是奇数的next跳过不打印,打印偶数行
root 0
daemon 2
lp 4
shutdown 6
mail 8
games 12
ftp 14
nobody 65534
polkitd 998
sssd 996
cockpit-wsinstance 994
sshd 74
avahi 70
saslauth 992
tcpdump 72
apache 48
tom 1000
------------------------------------------------------------------------------------------
[root@rocky tmp]# cat sn
SN	111
MODE	AAA
PN	!!!
NN	,,,
6gfdgfdgfd	
SN	222
MODE	BBB
PN	@@@
NN	...
sdfsdfsdfsd	
SN	333
MODE	CCC
PN	###
NN	///
sdfsdfsdfad	
SN	444
MODE	DDD
PN	$$$
NN	;;;
asdasdasgdf	
###
[root@rocky tmp]# grep "SN\|MODE\|PN\|NN"  sn | awk 'NR%4{printf "%s ",$0;next;}1'
NR%4 取模4 就剩下1,2,3了 16行只打印 123 567 91011 131415行,然后1为真打印全部行,next跳过1,2,3余数的行,剩下4,8,12,16行,printf是不换行的,next结束循环,进入下一行处理,触发条件是4,1是打印除了NR%4以外的行,所以1打印4行的时候会触发next换行
SN	111 MODE	AAA PN	!!! NN	,,,
SN	222 MODE	BBB PN	@@@ NN	...
SN	333 MODE	CCC PN	### NN	///
SN	444 MODE	DDD PN	$$$ NN	;;;
###
[root@rocky tmp]# egrep "SN|MODE|PN|NN"  sn | awk 'NR%2!=0{printf "%s \n",$0;}'
SN	111 
PN	!!! 
SN	222 
PN	@@@ 
SN	333 
PN	### 
SN	444 
PN	$$$ 
[root@rocky tmp]# egrep "SN|MODE|PN|NN"  sn | awk 'NR%2!=0{next;printf "%s \n",$0;}'
[root@rocky tmp]# egrep "SN|MODE|PN|NN"  sn | awk 'NR%2!=0{next;printf "%s \n",$0;}1'
MODE	AAA
NN	,,,
MODE	BBB
NN	...
MODE	CCC
NN	///
MODE	DDD
NN	;;;

------------------------------------------------------------------------------------------
root@ubuntu2004:~# df | awk -F'[ %]+' '/\/dev\/.d./{if($5>=10){print $1,$5}}'
/dev/sda3 22
root@ubuntu2004:~# df | awk -F' +|%' '/^\/dev\/sd/{if($5>=10)print $1,$5}'
/dev/sda3 22
root@ubuntu2004:~# df | awk -F'[[:space:]]+|%' '/^\/dev\/sd/{if($5>=10)print 
$1,$5}'
/dev/sda3 22
[root@centos8 ~]#df | awk -F"[ %]+" '/^\/dev\/sd/{if($(NF-1)>10)print $(NF-1)" 
full";else {print $(NF-1)" OK"}}'
3 OK
1 OK
13 full
[root@centos8 ~]#df | awk -F"[ %]+" '/^\/dev\/sd/{if($(NF-1)>10){print $(NF-1)" 
full"}else {print $(NF-1)" OK"}}'
3 OK
1 OK
13 full
------------------------------------------------------------------------------------------
root@ubuntu2004:~# awk 'BEGIN{sum=0;for(i=1;i<=100;i++){sum+=i};print sum}'
5050
root@ubuntu2004:~# for((i=1,sum=0;i<=100;i++));do let sum+=i;done;echo $sum
5050
[root@centos8 ~]#awk 'BEGIN{total=0;for(i=1;i<=100;i++){total+=i};print total}'
5050
------------------------------------------------------------------------------------------
[root@rocky ~]# awk 'BEGIN{num=50;if(num>=80){print "good"}else{print "laji"}}'
laji
[root@rocky ~]# awk 'BEGIN{num=90;if(num>=80){print "good"}else{print "laji"}}'
good
------------------------------------------------------------------------------------------
[root@rocky ~]# awk -F: '{if($3<=999){print $3,$1,"is system"}else{print $3,$1}}' /etc/passwd
0 root is system
1 bin is system
...
1000 tom
------------------------------------------------------------------------------------------
[root@rocky tmp]# seq 10 | awk 'i=!i'  本来i没有值,然后取反为真,打印1,然后i为真取反等于假,不打印2,3的时候 假i再取反为真,就打印3
1
3
5
7
9
------------------------------------------------------------------------------------------
[root@rocky tmp]# cat > score <<EOF
> name score
> xiaoming 100
> xiaohong 90
> xiaoqiang 80
> xiaowang 55
> EOF
[root@rocky tmp]# awk 'NR>=2{score=$2;if(score>=90){print $1,"goog"}else if(score>=80){print $1,"优秀"}else{print $1,"no pass"}}' score 
xiaoming goog
xiaohong goog
xiaoqiang 优秀
xiaowang no pass
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk 'BEGIN{i=1;sum=0;while(i<=20){sum+=i;i++};print sum}'
210
[root@rocky tmp]# awk 'BEGIN{i=1;sum=0;while(i<=20){sum=sum+i;i++};print sum}'
210
------------------------------------------------------------------------------------------
[root@rocky tmp]# sum=0; for i in `seq 20`;do let sum+=i;done ;echo $sum
210
[root@rocky tmp]# sum=0; for ((i=1;i<=20;i++));do let sum+=i;done ;echo $sum
210
------------------------------------------------------------------------------------------
[root@rocky tmp]# time (sum=0; for ((i=1;i<=1000000;i++));do let sum+=i;done ;echo $sum)
500000500000

real	0m2.675s
user	0m2.661s
sys	0m0.002s

[root@rocky tmp]# time (awk 'BEGIN{sum=0;i=1;while(i<=1000000){sum+=i;i++};print sum}')
500000500000

real	0m0.042s
user	0m0.041s
sys	0m0.001s

[root@rocky tmp]# time (seq -s+ 1000000 |bc)
500000500000

real	0m0.223s
user	0m0.122s
sys	0m0.119s

------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
[root@111 ~]# awk -F: '{print "hello",$1}' /etc/passwd 
hello root
hello bin
hello daemon
------------------------------------------------------------------------------------------
[root@rocky ~]# awk '0' /etc/passwd
[root@rocky ~]# awk '""' /etc/passwd
[root@rocky ~]# awk '1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@rocky ~]# awk '!1' /etc/passwd
[root@rocky ~]# awk '!0' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
------------------------------------------------------------------------------------------
[root@rocky ~]# seq 5 | awk 'i=!i'  本来i没有值为假,但是i不等于i,导致i为真,打印结果,然后2的时候i为真取反等于假所以不打印2,以此类推
1
3
5
[root@rocky ~]# seq 5 | awk '!(i=!i)' 取上边的反值
2
4
[root@rocky ~]# seq 5 | awk 'i'
[root@rocky ~]# seq 5 | awk -v i=1 'i'  赋值i=1 所以i为真 打印
1
2
3
4
5
[root@rocky ~]# seq 5 | awk -v i=0 'i' 赋值i=0 所以i为假 不打印
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk  -v FS=:  '{print $1FS$7}' /etc/passwd
root:/bin/bash
bin:/sbin/nologin
------------------------------------------------------------------------------------------
[root@rocky ~]# seq 10 | awk 'NR<=7 && NR>=2' 范围取值
2
3
4
5
6
7
------------------------------------------------------------------------------------------
[root@rocky ~]# awk '/^b/,/^h/' /etc/passwd  范围取值
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
------------------------------------------------------------------------------------------

[root@rocky tmp]# awk -v RS=";" -v FS=" " '{print $1}' 123
a
1
x
[root@rocky tmp]# cat 123
a b c;1 2 3;x y z
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -F: '{printf "%-30s %30s\n",$1,$3 }' /etc/passwd
root                                                        0
bin                                                         1
daemon                                                      2
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -F: 'BEGIN{print "----------------haha----------------"}{printf "haha:%-20s %2s\n",$1,$3 }' /etc/passwd
----------------haha----------------
haha:root                  0
haha:bin                   1

------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -F: 'BEGIN{print "----------------haha----------------"}{printf "haha:%-20s %2s\n",$1,$3 }END{print "--------------------hehe----------------"}' /etc/passwd
----------------haha----------------
haha:root                  0
haha:bin                   1
...
haha:apache               48
--------------------hehe----------------
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -F: 'BEGIN{print "----------------haha----------------"}{printf "haha:%-20s |%2s|\n",$1,$3 }END{print "--------------------hehe----------------"}' /etc/passwd
----------------haha----------------
haha:root                 | 0|
haha:bin                  | 1|
...
haha:apache               |48|
--------------------hehe----------------
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -v cls="m48" 'BEGIN{print cls;cls="m49";print cls}'
m48
m49
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -F":"  -v OFS=- '{print $1,$7}' /etc/passwd
root-/bin/bash
bin-/sbin/nologin
------------------------------------------------------------------------------------------
df -Th | sed '1d' |awk '{print "disk",$1,"mount_point",$7,"total_size",$3,"free_size",$6}'   
------------------------------------------------------------------------------------------
[root@111 ~]# head -1 /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'  等同于-F:
------------------------------------------------------------------------------------------
[root@111 ~]# head -1 /etc/passwd | awk 'BEGIN{FS=":";OFS="---"}{print $1,$7}' 指定分割后的值用---显示
root---/bin/bash
[root@111 ~]# head -1 /etc/passwd | awk -F: 'BEGIN{OFS="---"}{print $1,$7}'       指定分割后的值用---显示
root---/bin/bash
------------------------------------------------------------------------------------------
[root@111 ~]# ifconfig  | awk  'NR==2{print $2}'
192.168.1.106
------------------------------------------------------------------------------------------
[root@rocky ~]# df | awk -F" +|%" '{print $5}'		多分隔符表示
Use
0
0
2
0
14
83
0
------------------------------------------------------------------------------------------
[root@111 ~]# cat  /etc/passwd | awk -F: '{print "第",NR,"行",$1,$7}'
第 1 行 root /bin/bash
第 2 行 bin /sbin/nologin
------------------------------------------------------------------------------------------
[root@111 ~]# head -2  /etc/passwd | awk -F: '{print NF}'            每行被分割7    
7
7
------------------------------------------------------------------------------------------
[root@111 ~]# head -2  /etc/passwd | awk -F: '{print $NF}'			显示最后一行
/bin/bash
/sbin/nologin
------------------------------------------------------------------------------------------
[root@rocky httpd]# awk -F"[[ ]" '{print $1,$5}' access_log 
192.168.1.103 11/Aug/2022:09:42:35
192.168.1.103 11/Aug/2022:09:42:35
------------------------------------------------------------------------------------------
[root@111 ~]# head -2  /etc/passwd | awk -F: -v aa="haha" '{print aa,$1}'  定义变量
haha root
haha bin
------------------------------------------------------------------------------------------
[root@111 ~]# head -2  /etc/passwd | awk -F:  'BEGIN{aa="haha"} {print aa,$1}'   定义变量
haha root
haha bin
------------------------------------------------------------------------------------------
[root@111 ~]# cat /etc/passwd|awk -F: '{printf "%-20s%-6s%-s\n",$1,$3,$6}' 
root                0     /root
bin                 1     /bin
daemon              2     /sbin
adm                 3     /var/adm
------------------------------------------------------------------------------------------
[root@111 ~]# cat /etc/passwd|awk -F: '/^(r|s)/{print $1}'   打印r或者s开头的
root
sync
shutdown
systemd-network
sshd
rpc
rpcuser
------------------------------------------------------------------------------------------
[root@111 ~]# awk -F: '$3<=500{print $1}' /etc/passwd  uid小于等于500的用户
root
bin
daemon
adm
------------------------------------------------------------------------------------------
[root@111 ~]# awk -F: '$7 ~"nologin"{print $1,$7}' /etc/passwd  显示登陆方式是nologin
bin /sbin/nologin
daemon /sbin/nologin
------------------------------------------------------------------------------------------
[root@cenots8 shell]# awk -F: '/[^nologin]$/{print $1,$7}' /etc/passwd  显示登陆方式不是nologin的
root /bin/bash
sync /bin/sync
halt /sbin/halt
magedu_00 /bin/bash
------------------------------------------------------------------------------------------
[root@111 ~]# awk -F: '$3 == 0{print $1,$7}' /etc/passwd        显示uid=0的用户
root /bin/bash
------------------------------------------------------------------------------------------
[root@111 ~]# awk -F: '$3<=999&&$3>1{print $1}' /etc/passwd  列出系统用户
daemon
adm
lp
sync
------------------------------------------------------------------------------------------
[root@111 ~]# df -Th | sed '1d' | awk '+$6>=20{printf "%-15s%-s\n", $7,$6}'   显示磁盘超过20%的
/boot          58%
/mnt           100%
------------------------------------------------------------------------------------------
[root@111 ~]# awk -F: '$3==0,$7~"nologin$"{print $1}' /etc/passwd uid是0到结尾是nologin的用户
root
bin
------------------------------------------------------------------------------------------
表头BEGIN和表尾END的使用
[root@111 ~]# head -3 /etc/passwd| awk -F: 'BEGIN{printf "%-8s%-5s%-1s\n","USER","UID","BASH"}{printf "%-8s%-5s%-1s\n",$1,$3,$7}END{print "=================gameover======================================="}'
USER    UID  BASH
root    0    /bin/bash
bin     1    /sbin/nologin
daemon  2    /sbin/nologin
=================gameover=======================================
[root@111 ~]# 
############################################################################################
awk 逻辑控制语句
if(条件){语句;语句}else{语句1;语句2}
while i=1;while(i<=1){语句;i++}
for (变量定义;循环的条件;改变循环的条件){语句1;语句2}
for (i=1;i<=4;i++){...}
awk数组
for (变量 in 数组名称){print 数组名称[变量]}
------------------------------------------------------------------------------------------
[root@111 etc]# awk -F: '{if ($3=="0") {print $1,"is admin"}}' passwd
root is admin
------------------------------------------------------------------------------------------
[root@111 etc]# awk -F: '{if ($1=="root") print $1,"is admin"; else print $1,"is yonghu"}' passwd 
root is admin
bin is yonghu
daemon is yonghu
------------------------------------------------------------------------------------------
[root@111 etc]# awk -F: '{if ($3>=500) {print $1}}' passwd | wc -l
20
------------------------------------------------------------------------------------------
[root@rocky tmp]# awk -F: '{if ($7=="/sbin/nologin"){print $7,"is no"}}'  /etc/passwd
/sbin/nologin is no
------------------------------------------------------------------------------------------
[root@111 etc]# awk -F: -v count=0 '{if ($3>=500) {count++}}END{print "大于等于500的用户有;"count}' passwd   
大于等于500的用户有;20
------------------------------------------------------------------------------------------
[root@111 shell]# awk -F: -v num1=0 -v num2=0 '/bash$/ || /nologin$/ {if ($7=="/bin/bash"){num1++}else{num2++}}END{print "bash用户有",num1"\n""nologin用户有",num2 }' /etc/passwd  
bash用户有 17
nologin用户有 24

[root@111 etc]# awk -F: -v bs=0 -v ns=0 '/bash$/ || /nologin$/{if($7=="/bin/bash")bs++;else ns++}END{print bs,ns}' passwd  
17 24
------------------------------------------------------------------------------------------
[root@111 shell]# head -2 /etc/passwd | awk '{i=1;while(i<=3){print $0 i++}}'  输出3遍
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash2
root:x:0:0:root:/root:/bin/bash3
bin:x:1:1:bin:/bin:/sbin/nologin1
bin:x:1:1:bin:/bin:/sbin/nologin2
bin:x:1:1:bin:/bin:/sbin/nologin3
------------------------------------------------------------------------------------------
[root@111 shell]# awk 'BEGIN{print length("hahaha")}' /etc/passwd  统计print显示的字符数
6
------------------------------------------------------------------------------------------
显示字符大于4的
[root@111 shell]# head -3 /etc/passwd | awk -F: '{i=1;while(i<=NF){if(length($i)>4){print $i};i++}}'
/root
/bin/bash
/sbin/nologin
daemon
daemon
/sbin
/sbin/nologin
[root@111 shell]# head -3 /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@111 shell]# 
------------------------------------------------------------------------------------------
显示字符大于5的并且计算数量显示到END
[root@111 shell]# awk -v count=0 '{i=1;while(i<=NF){if(length($i)>5){print $i;count ++};i++}}END{print count}' awk 
------------------------------------------------------------------------------------------
显示字符大于5的并且计算数量显示到END把标点符号去除
[root@111 shell]# sed 's/[[:punct:]]//g' awk|awk -v count=0 '{i=1;while(i<=NF){if(length($i)>5){print $i;count ++};i++}}END{print count}'   
------------------------------------------------------------------------------------------ 
显示字符大于5的
[root@111 shell]# sed 's/[[:punct:]]//g' awk|awk '{for(i=1;i<=NF;i++){if(length($i)>5){print $i}}}'  
------------------------------------------------------------------------------------------ 
横行变竖行
[root@wang ~]#  awk '{for (i=1;i<=NF;i++){print $i}}' sn      
qwe
qwe
qw
e
qw
ewq
eq
wjkel
wqjkl
ejwqkl
jkwlq
jeklwq
jkle
jklqwj
lk
[root@wang ~]# cat sn
qwe             qwe qw       e     qw    ewq eq wjkel wqjkl ejwqkl jkwlq jeklwq jkle jklqwj lk
[root@wang ~]# 
------------------------------------------------------------------------------------------
[root@111 shell]# awk -F: '{for(i=1;i<=4;i++){print $i}}' /etc/passwd     
root
x
0
0
bin
x
1
1
------------------------------------------------------------------------------------------
各个shell有多少次
[root@111 ~]# awk -F: '{print $7}' /etc/passwd | sort | uniq -c
     17 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     24 /sbin/nologin
      1 /sbin/shutdown

[root@111 ~]# awk -F: '{shell[$7]++}END{for(i in shell){print i,shell[i]}}' /etc/passwd
/bin/sync 1
/bin/bash 17
/sbin/nologin 24
/sbin/halt 1
/sbin/shutdown 1
------------------------------------------------------------------------------------------
查看访问量
[root@111 www.log]# awk '{acc[$1]++}END{for(i in acc){print i,acc[i]}}' access_log  
192.168.1.102 605

[root@111 www.log]# grep '192.168.1.102' access_log  | wc -l           
605


[root@111 www.log]# grep '.*24/Nov/2021:20:3[0-9].*' access_log  | awk '{print $1}' | sort | uniq -c
    500 192.168.1.102
	
[root@111 www.log]# grep '24/Nov/2021' access_log  | awk '{count[$1]++}END{for(i in count){print i,count[i]}}' | sort -n -k2 -r
192.168.1.102 605                  -n是数字排序 -k2 是第二个值计算 -r 倒序

网站PV量
[root@111 www.log]# grep '24/Nov/2021' access_log  | awk '{count[$7]++}END{for(i in count){print i,count[i]}}' | sort -n -k2 -r  
/index.html 601
/a.php 2
/indel.html 1
/ 1
------------------------------------------------------------------------------------------
显示空行
[root@wang conf]# awk -v num=0 '/^$/{if(NF="0"){num++}}END{print num}' httpd.conf            
37
[root@wang conf]# grep "^$" httpd.conf | wc -l                                   
37
------------------------------------------------------------------------------------------
修改文件顺序
#!/bin/bash
file='/root/shell/bash.$$'

cat /etc/passwd | awk -F: '{print $7,$1}' > $file
mv $file  11
[root@wang shell]# bash awk1
[root@wang shell]# cat 11
/bin/bash root
/sbin/nologin bin
/sbin/nologin daemon
/sbin/nologin adm
------------------------------------------------------------------------------------------
awk -F: -v count=0 '{ if ( $3>=1000) {count++}} END{print "大于1000的用户有",count }' /etc/passwd
awk -F: '{ if ( $3>=1000) {print "大于1000的用户是:",$1}}' /etc/passwd
------------------------------------------------------------------------------------------
[root@node01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G         93M        1.6G        8.8M        139M        1.5G
Swap:          2.0G          0B        2.0G
[root@node01 ~]# free -h | awk '/^Mem/{print $2}'
1.8G
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值