匹配文件中符合要求的列
还是用之前的arr.dat来举例。
我们要找出所有时间为7点钟的记录,我们可以这样写:
- awk '/7/' arr.dat
上面的程序会匹配出一行中含有数字7的记录,并整行输出(因为省略了action默认就是输出整行)。
如果ID中含有7,就算是在8点钟,上面的程序也会匹配出来,很杯具呀,改进一下:
- awk '$2 ~ /7/' arr.dat
解释一下:$2指的是第二列,'~'表示的是匹配(match),'/7/'表示的是含有数字7,连起来就是匹配第二列中含有数字7的列。
很不幸的是,上面的这个程序也是有bug的,因为一旦第二列的分钟或秒钟里出现了数字7,也会匹配出来,怎么办呢?再改进一下:
- awk '$2 ~ /7:/' arr.dat
加一个冒号之后,这就可靠得多了,这只会找出冒号之前有数字7的。
输出结果:
- 1034 7:26
- 1025 7:27
- 1101 7:32
- 1006 7:45
- 1012 7:46
- 1028 7:49
- 1051 7:51
- 1029 7:57
- 1042 7:59
还有没有别的写法呢?答案是,有:
- awk '$2 ~ /^7/' arr.dat
解释一下,'/^7/'表示是以7开头,所以整个语句表示的就是匹配第二列中以7开头的记录,输出的结果跟上面是一样的。
本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1033631,如需转载请自行联系原作者