shell awk语法问题求教

awk '/Time/ {a=($NF>="10:09:00"&&$NF<="10:11:00")}a' a

谁帮忙解释一下这句语法 解释具体一点 谢谢
a文件内容如下:
--------------------------------------------------------------------
# Time: 130912 10:08:43
...(很多内容 省略)
# Time: 130912 10:09:38
...
# Time: 130912 10:10:02
...
# Time: 130912 10:11:43
...
--------------------------------------------------------------------

这条语句是如何实现将 下面内容 全显示出来的。而不是仅显示了符合条件的time那条记录。
[root@localhost tmp]# awk '/Time/ {a=($NF>="10:09:00"&&$NF<="10:11:00")}a' a
# Time: 130912 10:09:38
...(还有很多内容)
# Time: 130912 10:10:02
...

第1个回答  2013-09-26

/Time/ 表示模式,行中包含Time关键字的执行后面{}中的操作;

a=() 表示一个赋值操作;

$NF,其中NF表示字段的个数,$NF表示以字段的个数作为变量返回,例如NF的数值为2,则$NF=$2,其中$2表示第二个字段的内容;

上述的意思是如果$NF的值在10:09:00和10:11:00之间,就将判断的值赋给变量a(a=1或者为真),并且打印到屏幕。


例如通过如下的示例进行测试:

[root@centos_x86_1 ~]# echo 'Time 10:09:01' | awk  '{a=($NF>="10:09:00"&&$NF<="10:11:00")}a'
Time 10:09:01

上述NF值是2,$NF即表示$2,$2的值是10:09:01,这个值是大于等于10:09:00并且小于等于10:11:00,所以会将满足的行输出到屏幕;


[root@centos_x86_1 ~]# echo 'Time 10:12:01' | awk  '{a=($NF>="10:09:00"&&$NF<="10:11:00")}a'   
[root@centos_x86_1 ~]#


上述示例中19:12:01由于不在10:09:00和10:11:00之间,所以不满足条件,就不会有输出。

第2个回答  2013-09-26
a 文件中包含“Time”字符串的行中,(以空格作为域分隔符)最后一个域(应该是一个时间),此时间介于10:09:00---10:11:00之间,则a置为True,否则为False,如果a为True则打印此行
相似回答