awk $0: 为所有域

awk 工作原理

awk  '{print "hello awk" }'

awk 'BEGIN{print 2^10}'
字符串需要加双引号
awk -F: '{print $1"=========="$3}' passwd  |head 
df |awk '/dev/{print $1"\t"$5}' 

#FS awk 内置 的变量
awk -v FS=':' '{print $1,FS,$3}' passwd 
awk -F: '{print $1,":"$3}' passwd 


awk -v FS=':' -v OFS='**' '{print $1,FS,$3}' passwd 

[root@node01 ~]# df|awk  -v FS="%" '/^\/dev\/sd/{print $1}' |awk '{print $1,$5}'
/dev/sda3 18
/dev/sda1 50

awk -v FS=: '{print $(NF-1)}' passwd 

awk 参数:
[root@node01 ~]# awk 'BEGIN{print ARGV[0]}'  /etc/fstab  /etc/inittab 
awk
[root@node01 ~]# awk 'BEGIN{print ARGV[1]}'  /etc/fstab  /etc/inittab  
/etc/fstab
[root@node01 ~]# awk 'BEGIN{print ARGV[2]}'  /etc/fstab  /etc/inittab  
/etc/inittab

自定义变量:

[root@node01 ~]# awk -v var1="hello" 'BEGIN{print var1}' 
hello
[root@node01 ~]# awk 'BEGIN{var1="hello"; print var1}'     
hello
[root@node01 ~]# awk -v FS=":" -v OFS=":" '{var1="name"; print var1,$1}' passwd |head -n2
name:root
name:bin

格式化输出:

[root@node01 ~]# awk -F: 'BEGIN{print "user                        uid\n-------------------------------"}{printf "%-20s:%10d\n",$1,$3}' passwd  |head 

awk -F:  '{printf "username:%s,uid:%d\n",$1,$2}' passwd  |head

awk -F:  '{printf "username:%-20s uid:%-20d\n",$1,$3}' passwd  |head 

运算符:

\

[root@node01 ~]# awk 'BEGIN{i=0; print ++i,i}'            
1 1
[root@node01 ~]# awk 'BEGIN{i=0; print i++,i}'    
0 1

awk ' $0 ~ /root/{print $1}' passwd 
awk '$0 !~/root/{print $1}' passwd
[root@node01 ~]# awk -F: '$0 ~ /^root/{print $1}' passwd
root
[root@node01 ~]# df |awk -F% '/^\/dev\/sd/{print $1}'   |awk '$5>=50'
/dev/sda1         303780  151188    152592  50

awk -F: '$3>0 && $3<1000 {print $1,$3}' passwd
awk -F: '!($3<=1100){print $1,$3}' passwd 
awk -F: '$3>=1000||$3<=1100{print $1,$3}' passwd
awk 'BEGIN{i=0; print !i}'

条件表达式(三目表达式):

 awk -F: '{$3>=1000?usertype="Common User":usertype="Sysadmin or SysUser";printf"%-25s:%-s\n",$1,usertype}' /etc/passwd

awkPATTERN

去掉 # 注释
awk '!/^[[:blank:]]*#/' f1  
[root@node01 ~]# awk -F: '$NF=="/bin/bash"{print $1,$NF}' passwd  
root /bin/bash
sun /bin/bash
admin /bin/bash
[root@node01 ~]# awk -F: '$NF ~ "/bash$"{print $1,$NF}' passwd 
awk -F: '/\/bin\/bash$/{print $1,$NF}' passwd
awk -F: '/^root\>/,/nobody\>/{print $1}' passwd

awk -F: '(NR>=10&&NR<=20){print NR,$1}' /etc/passwd

awk -F : 'BEGIN {print "USER USERID"} {print $1":"$3} END{print "end file"}' /etc/passwd

[root@node01 ~]# awk -F : 'BEGIN {print "USER USERID"} {print $1":"$3} END{print "end file"}' /etc/passwd  
USER USERID
USER USERID
root:0
admin:1001
end file

奇数偶数:

seq 10 |awk '!i{print $0}'    
seq 10 |awk 'i=!i{print $0}' 
seq 10 |awk '!(i=!i){print $0}'

seq 10 |sed -n 1~2p
seq 10 |sed -n 2~2p 
[root@node01 ~]# seq 10 |awk 'i=!i' |gawk '{ sum =sum + $1 }END { print sum }'  
25

awk 基数偶数原理: seq 10 |awk '{i=!i; print i }' image.png