参考地址:http://linux.chinaunix.net/techdoc/develop/2007/02/10/950229.shtml
html
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
linux
http://www.cnblogs.com/repository/archive/2011/05/13/2045927.html
shell
相较于 sed 经常做用于一整个行的处理, awk 则比较倾向于一行当中分红数个『字段』来处理。 所以,awk 至关的适合处理小型的数据数据处理呢!awk 一般运做的模式是这样的:
[root@linux ~]# awk '条件类型1{动做1} 条件类型2{动做2} ...' filename awk 能够处理后续接的档案,也能够读取来自前个指令的 standard output 。 但如前面说的, awk 主要是处理『每一行的字段内的数据』,而预设的『字段的分隔符为 "空格键" 或 "[tab]键" 』!举例来讲,咱们用 last 能够将登入者的数据取出来, 结果以下所示:
[root@linux ~]#lastdmtsai pts/0 192.168.1.12 Mon Aug 22 09:40 still logged in
root tty1 Mon Aug 15 11:38 - 11:39 (00:01)
reboot system boot 2.6.11 Sun Aug 14 18:18 (7+15:41)
dmtsai pts/0 192.168.1.12 Fri Aug 12 12:07 - 12:08 (00:01)
若我想要取出帐号与登入者的 IP ,且帐号与 IP 之间以 [tab] 隔开,则会变成这样:
[root@linux ~]# last | awk '{print $1 "\t" $3}'
dmtsai 192.168.1.12
root Mon
reboot boot
dmtsai 192.168.1.12
由于不论哪一行我都要处理,所以,就不须要有 "条件类型" 的限制!我所想要的是第一栏以及第三栏, 可是,第二行及第三行的内容怪怪的~这是由于数据格式的问题啊!因此啰~使用 awk 的时候,请先确认一下您的数据当中,若是是连续性的数据,请不要有空格或 [tab] 在内,不然,就会像这个例子这样,会发生误判喔!
另外,由上面这个例子您也会知道,在每一行的每一个字段都是有变量名称的,那就是 $1, $2... 等变量名称,以上面的例子来讲, dmtsai 是 $1 ,由于他是第一栏嘛!至于 192.168.1.12 是第三栏, 因此他就是 $3 啦!后面以此类推~呵呵!还有个变数喔!那就是 $0 ,$0 表明『一整列资料』的意思~ 以上面的例子来讲,第一行的 $0 表明的就是『dmtsai pts/0.... 』那一行啊! 由此可知,刚刚上面四行当中,整个 awk 的处理流程是:
bash
|