Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56503
  • 博文数量: 11
  • 博客积分: 1515
  • 博客等级: 上尉
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 13:16
文章分类

全部博文(11)

文章存档

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也为空

 

一个比较经典的例子:

我想要抓出linuxip

[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

阅读(1520) | 评论(0) | 转发(0) |
0

上一篇:人生总有低端时

下一篇:没有了

给主人留下些什么吧!~~