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 }'