awk学习笔记(8) - 简单的正则匹配

简介:

匹配文件中符合要求的列

还是用之前的arr.dat来举例。

我们要找出所有时间为7点钟的记录,我们可以这样写:

 
 
  1. awk '/7/' arr.dat 

上面的程序会匹配出一行中含有数字7的记录,并整行输出(因为省略了action默认就是输出整行)。

如果ID中含有7,就算是在8点钟,上面的程序也会匹配出来,很杯具呀,改进一下:

 
 
  1. awk '$2 ~ /7/' arr.dat 

解释一下:$2指的是第二列,'~'表示的是匹配(match),'/7/'表示的是含有数字7,连起来就是匹配第二列中含有数字7的列。

很不幸的是,上面的这个程序也是有bug的,因为一旦第二列的分钟或秒钟里出现了数字7,也会匹配出来,怎么办呢?再改进一下:

 
 
  1. awk '$2 ~ /7:/' arr.dat 

加一个冒号之后,这就可靠得多了,这只会找出冒号之前有数字7的。

输出结果:

 
 
  1. 1034 7:26  
  2. 1025 7:27 
  3. 1101 7:32  
  4. 1006 7:45 
  5. 1012 7:46  
  6. 1028 7:49  
  7. 1051 7:51 
  8. 1029 7:57  
  9. 1042 7:59 

还有没有别的写法呢?答案是,有:

 
 
  1. awk '$2 ~ /^7/' arr.dat 

解释一下,'/^7/'表示是以7开头,所以整个语句表示的就是匹配第二列中以7开头的记录,输出的结果跟上面是一样的。










本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1033631,如需转载请自行联系原作者
目录
相关文章
|
Perl
awk指定分隔符
awk指定分隔符
53 0
|
机器学习/深度学习 Shell Linux
|
Perl 机器学习/深度学习