2010年(11)
分类: LINUX
2010-09-17 11:28:56
如果想要将每一个字符都作为一个域 那么写为 -F ""
例子:
[root@CentOS5-4 ~]# cat test
1 2:: 3
4:: 5 6
[root@CentOS5-4 ~]# cat test |awk -F "" '{print $2}'
:
[root@CentOS5-4 ~]# cat test |awk -F "" '{print $3}'
2
:
技巧:如果想要 空格或者字符: 为分隔符号怎么办?
[root@CentOS5-4 ~]# cat test
1 2:: 3
4:: 5 6
[root@CentOS5-4 ~]# cat test |awk -F "[ :]" '{print $1}'
1
4
[root@CentOS5-4 ~]# cat test |awk -F "[ :]" '{print $2}'
2
[root@CentOS5-4 ~]# cat test |awk -F "[ :]" '{print $3}'
[root@CentOS5-4 ~]# cat test |awk -F "[ :]" '{print $4}'
5
[root@CentOS5-4 ~]# cat test |awk -F "[ :]" '{print $5}'
3
6
结论:1 如果 空格或者:作为分隔符 那么写为 –F “[ :]”
2 为什么这里显示这么奇怪,是因为
:和空格都是 分隔符号 那么如果两个 :: 那么之间的域就是空
因此第二行的$2为空
如果是“: “
那么都是分隔符 因此第二行的$3也为空
一个比较经典的例子:
我想要抓出linux的ip
[root@CentOS5-4 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:73:0B:9A
inet addr:172.16.251.241 Bcast:172.16.251.255 Mask:255.255.255.0
必须写为
[root@CentOS5-4 ~]# ifconfig |awk -F "[ :]" 'NR==2{print $13}'
172.16.251.241
这里为什么是$13
是因为inet前面大量空格
而空格作为域分隔符号 空格和空格之间肯定是域存在的 因此前面$1-$10左右都是空
如果想指定一个或者多个空格作为分隔符 可以写为:
[root@CentOS5-4 ~]# ifconfig |awk -F "[ :]+" 'NR==2{print $4}'
172.16.251.241
这样域变成了$4打印ip