awk小节
1. awk的用法:
awk options “program” input_stream
更细点划分:awk options “pattern + Action”
awk将每个输入行识别成一条记录,而将那一行上的每个单词域识别成一个字段
********************************************
【.$1,$2…$N表示输入的第几个记录
$0表示输入的所有记录】
********************************************
2. Optons
-F fs制定一个分隔符
-f file制定读取的文件名
-v var=value定义一个变量,在gawk中有默认值
-mfN指定数据文件中处理的最大个数
-mrN指定数据文件中处理的最大size
-W keyword指定兼容模式或为gawk指定警告级别
3.Pattern
Regexp Patterns:使用正则表达式.
Expression Patterns:任何匹配的表达式
Ranges:指定匹配的范围
BEGIN/END:指定开始和结束规则
Empty:空记录,匹配任何记录
4.变量名 含义
ARGC命令行变元个数
ARGV 命令行变元数组,其中每一元素表示为ARGV[n],n为期望访问的命令行参数。
FILENAME 当前输入文件名
ENVIRON 支持系统设置的环境变量,例如ENVIRON[“EDITOR”] =“Vi”
FNR 当前文件中的记录号(可理解为行号),其变量值小于等于NR。
FS 输入域分隔符,默认为一个空格
RS 输入记录分隔符,缺省为新行(\n)
NF 当前记录里域个数(也可理解成当前的列数),在记录被读之后再设置
NR 到目前为止记录数(也就是当前的行数)
OFS 输出域分隔符,缺省为空格。如果想设置为#,写入O F S = " # "
ORS 输出记录分隔符,缺省为新行(\n)
gsub(r,s) 在整个$0中用s替代r,r为原内容,s为新内容,r可为/正则/
gsub(r,s,t) 在整个t中用s替代r, r为原内容,s为新内容,r可为/正则/
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs)以fs为分隔符将s分成序列数组a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 将$0第一个r替换为s,r可为/正则/
sub(r,s,t) 将域t中的第一个r替换为s,r可为/正则/
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
rand() 产生0到1之间的符点小数
Printf()
- 左对齐
width 域的步长,用0表示0步长
. prec 最大字符串长度,或小数点右边的位数
%c ASCII字符
%d 整数
%e 浮点数,科学记数法
%f 浮点数,例如(1 2 3 . 4 4)
%g awk决定使用哪种浮点数转换e或者f
%o 八进制数
%s 字符串
%x 十六进制数
5.例子:
1.)Pattern为表达式:
查找用户UID大于500的信息:
[root@station30 ~]# awk -F: '$3>500{print $0}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
visitor:x:501:501::/home/visitor:/bin/bash
zhuying:x:502:502::/home/zhuying:/bin/bash
user1:x:503:503::/home/user1:/bin/bash
stu:x:504:504::/home/stu:/bin/bash
Natasha:x:505:505::/home/Natasha:/bin/bash
natasha:x:2000:2000::/home/natasha:/bin/bash
wendy:x:2001:2001::/home/wendy:/bin/bash
cracker:x:2002:2002::/home/cracker:/sbin/nologin
[root@station30 ~]#
查找root用户的信息:
[root@station30 ~]# awk -F: '$1=="root"{ print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@station30 ~]#
将第一字段都替换成root,相当于给变量赋值:(和上个例子进行比较)
[root@station30 ~]# awk -F: '$1="root"{print $0}' /etc/passwd
root x 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin
root x 3 4 adm /var/adm /sbin/nologin
root x 4 7 lp /var/spool/lpd /sbin/nologin
root x 5 0 sync /sbin /bin/sync
root x 6 0 shutdown /sbin /sbin/shutdown
root x 7 0 halt /sbin /sbin/halt
root x 8 12 mail /var/spool/mail /sbin/nologin
root x 9 13 news /etc/news
root x 10 14 uucp /var/spool/uucp /sbin/nologin
root x 11 0 operator /root /sbin/nologin
root x 12 100 games /usr/games /sbin/nologin
root x 13 30 gopher /var/gopher /sbin/nologin
root x 14 50 FTP User /var/ftp /sbin/nologin
root x 99 99 Nobody / /sbin/nologin
root x 69 69 virtual console memory owner /dev /sbin/nologin
root x 32 32 Portmapper RPC user / /sbin/nologin
root x 47 47 /var/spool/mqueue /sbin/nologin
root x 51 51 /var/spool/mqueue /sbin/nologin
root x 28 28 NSCD Daemon / /sbin/nologin
root x 16 16 Special user account to be used by OProfile /home/oprofile /sbin/nologin
root x 77 77 /var/arpwatch /sbin/nologin
root x 38 38 /etc/ntp /sbin/nologin
root x 81 81 System message bus / /sbin/nologin
root x 70 70 Avahi daemon / /sbin/nologin
root x 43 43 X Font Server /etc/X11/fs /sbin/nologin
root x 29 29 RPC Service User /var/lib/nfs /sbin/nologin
root x 65534 65534 Anonymous NFS User /var/lib/nfs /sbin/nologin
root x 74 74 Privilege-separated SSH /var/empty/sshd /sbin/nologin
root x 68 68 HAL daemon / /sbin/nologin
root x 42 42 /var/gdm /sbin/nologin
root x 100 103 avahi-autoipd /var/lib/avahi-autoipd /sbin/nologin
root x 500 500 /home/student /bin/bash
root x 501 501 /home/visitor /bin/bash
root x 502 502 /home/zhuying /bin/bash
root x 503 503 /home/user1 /bin/bash
root x 504 504 /home/stu /bin/bash
root x 505 505 /home/Natasha /bin/bash
root x 2000 2000 /home/natasha /bin/bash
root x 2001 2001 /home/wendy /bin/bash
root x 2002 2002 /home/cracker /sbin/nologin
直接找某个字符串的前一行号:
[root@Test230 zy]# awk '/zhengzhoudaxue/{print NR-1}' test.txt
5
12
[root@Test230 zy]# grep zhengzhoudaxue test.txt -B2 -c
2
[root@Test230 zy]# grep zhengzhoudaxue test.txt -B2 -n
4-eyrahrcfmrn
5-ewhjrnj
6:zhengzhoudaxue xixixix
--
11-test
12-huhuhuh huhu test just a test~
13:zhengzhoudaxue This is a test~
下面再来看一下mysqlbinlog的用法:
[root@mysql1 mysql]# mysqlbinlog --start-datetime="2012-04-17 01-00-00" --stop-datetime="2012-04-17 01-30-00" mysql-bin.000248 |grep -B 5 "user_dealer"|grep -B 5 "id=198492"
我们来看看NR和NF到底表示的是什么意思:
[root@master ~]# cat /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
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:4294967294:4294967294:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
avahi-autoipd:x:100:156:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
oracle:x:500:500::/home/oracle:/bin/bash
puppet:x:501:502::/home/puppet:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
zhuying:x:502:503::/home/zhuying:/bin/bash
[root@master ~]#
[root@master ~]# cat /etc/passwd | awk -F: '{print $NR}'
root
x
2
4
lp
/sbin
/sbin/shutdown
我们可以看出输出的是第一行的第一列,第二行的第二列。。。。实际是NR就是表示当前的行数,在第一行的时候相当于$1,第二行的时候相当于$2,以此类推!
上面只是为了帮助大家更好的理解NR,其实正确的用法是:
[root@master ~]# cat /etc/passwd | awk -F:'NR==1{print $0}'
root:x:0:0:root:/root:/bin/bash
[root@master ~]# cat /etc/passwd | awk -F: '{print $NF}'
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/bin/bash
/bin/bash
/bin/bash
2.)Pattern为模糊匹配:
查找/etc/passwd中包含有Root或root的行
[root@station30 ~]# awk -F: '$1~/[Rr]oot/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
查找/etc/passwd中不包含Root或root的行
[root@station30 ~]# awk -F: '$1!~/[Rr]oot/{print $0}' /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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
avahi-autoipd:x:100:103:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
student:x:500:500::/home/student:/bin/bash
visitor:x:501:501::/home/visitor:/bin/bash
zhuying:x:502:502::/home/zhuying:/bin/bash
user1:x:503:503::/home/user1:/bin/bash
stu:x:504:504::/home/stu:/bin/bash
Natasha:x:505:505::/home/Natasha:/bin/bash
natasha:x:2000:2000::/home/natasha:/bin/bash
wend