HOME 生活记录运维/编程
作者/来源:yixinu.com
栏目:运维/编程
日期:2012-03-31 16:52:12

过虑磁盘分区剩余空间大于200000KB 的分区,以M为单位显示 ,并留下小数点后三位

[root@fedora14 ~]# df | grep -v "Avail" | gawk '$4 > 200000 {OFMT="%.3f"; print $1,$4/1024,"M"}'
/dev/sda3 14435.445 M
tmpfs 500.699 M
/dev/sda1 248.618 M
[root@fedora14 ~]# 



文件中的AWK:

[root@fedora14 ~]# cat awk1.awk
#!/bin/awk
/^Mark/ {print "Hello Mark!"}
{print $1,$3}
[root@fedora14 ~]# cat names | gawk -f awk1.awk
china 123
America 456
England 789
[root@fedora14 ~]# 



printf函数修饰符

[root@fedora14 ~]# cat names
china   beijing         123
America   NewYork       456
England   London        789
[root@fedora14 ~]# cat names | gawk '{printf("%10s %-10s %.2fn",$1,$2,$3)}'
     china beijing    123.00
   America NewYork    456.00
   England London     789.00
[root@fedora14 ~]#




字段分隔符,字段(NF)和条目(NR) 

example1:在命令行中使用 -F 定义分隔符

#[root@fedora14 ~]# cat passwd | gawk -F: ‘/root/ {print $1,$3,$7}’
root 0 /bin/bash
operator 11 /sbin/nologin


example2: 在BEGIN语句中定义分隔符

[root@fedora14 ~]# cat passwd | gawk 'BEGIN{FS=":"} /root/{print $1,$3,$7}'
root 0 /bin/bash
operator 11 /sbin/nologin
[root@fedora14 ~]# 


example3:


[root@fedora14 ~]# cat names
china   beijing         123
America   NewYork       456
England   London        789
[root@fedora14 ~]# cat names | gawk '{print NR,NF,$(NF-1)}'
1 3 beijing
2 3 NewYork
3 3 London
[root@fedora14 ~]# 



example4:打印奇数行


[root@fedora14 ~]# cat passwd | gawk 'BEGIN{FS=":"} NR%2==1 {print NR,$0}'  
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 operator:x:11:0:operator:/root:/sbin/nologin
13 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin




比较表达式


example1: 过虑在级别3、4、5都开启的服务


[root@fedora14 ~]# chkconfig | gawk '$5~/on/&&$6~/on/&&$7~/on/{print $1,"->",$5,$6,$7}'
NetworkManager -> 3:on 4:on 5:on
acpid -> 3:on 4:on 5:on
atd -> 3:on 4:on 5:on
auditd -> 3:on 4:on 5:on
avahi-daemon -> 3:on 4:on 5:on
bluetooth -> 3:on 4:on 5:on
cpuspeed -> 3:on 4:on 5:on
crond -> 3:on 4:on 5:on
.....
example2:过虑ID大于0并且小于500的帐户



[root@fedora14 ~]# cat passwd| gawk -F: '$3>0&&$3<500{print $1,$3,$7}'
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
sync 5 /bin/sync
shutdown 6 /sbin/shutdown
halt 7 /sbin/halt
mail 8 /sbin/nologin
uucp 10 /sbin/nologin
operator 11 /sbin/nologin


 

 




模式、操作、正则表达式、匹配操作符

 

正则表达式匹配符

 

example1:过虑用户名只有四个字母的用户,~符号表示字段1($1)与右边的正则表达式(/^....$/)匹配

 

[root@bogon ~]# gawk -F: '$1~/^....$/{print $0}' passwd 
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
abrt:x:499:498::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

 

example2:过虑http.conf中以#开头和空白行


[root@fedora14 ~]# cat httpd.conf | gawk '$0!~/^#/&&$0!~/^ *$/{print $0}'
ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5


 




三目运算符:

example1:


[root@fedora14 ~]# cat names 
china   beijing         123
America   NewYork       456
England   London        789
England   London
[root@fedora14 ~]# cat names | gawk '{INFO=(NF == 3)?$NF:"Error"; print INFO}'
123
456
789
Error
[root@fedora14 ~]# 




BEGIN模式:

example1:


[root@fedora14 ~]# cat names 
china   beijing         123
America   NewYork       456
England   London        789
England   London
[root@fedora14 ~]# gawk 'BEGIN{OFS=":";ORS="nn";}{print $1,$2,$3}' names 
china:beijing:123

America:NewYork:456

England:London:789

England:London:

[root@fedora14 ~]# 




END模式和输出重定向:

example1:


[root@fedora14 ~]# gawk '$0~/<Direct/{print $0;count++} END{print "Total:",count}' httpd.conf
<Directory />
<Directory "/var/www/html">
#<Directory /home/*/public_html>
<Directory "/var/www/icons">
<Directory "/var/www/cgi-bin">
    <Directory "/var/www/error">
Total: 6

example2: 追加内容到指定文件


[root@fedora14 ~]# gawk '$0~/<Direct/,$0~/</Direct/{print $0 > "./httpd.conf2";count++} END{print "Total:",count}' httpd.conf



getline:


example1:

"-"代表从管道过来的信息

[root@fedora14 ~]# ps -aux | gawk 'BEGIN{getline INFO<"-"} $1~/root/{print $0}'


example2:

当前终端输入的信息由NAME接收

[root@fedora14 ~]# gawk 'BEGIN{FS=":";getline NAME < "/dev/tty"} $1~NAME {print $3}' passwd 
fedora
500


分享到:

Copyright © 2013-2014 yixinu.com 湘ICP备14004402号

QQ:316686606  Email: 316686606@qq.com