如何使用awk获取小时范围?

时间:2016-03-21 03:24:31

标签: bash awk sed grep

我想在我的日志文件中以1小时的间隔提取数据。这是我的变量:

date_file = date +"%Y-%m-%d %H"  date_minus_one = date -d "-1 hour" +"%Y-%m-%d %H"  date_minus_two = date -d "-2 hour" +"%Y-%m-%d %H"

这是我在awk中的语法,但它始终打印所有数据。

awk '$date_file >= $date_minus_one && $date_file <= $date_minus_two' <filename>

我也使用grep来获得1小时的间隔,但它没有用。

这是我想要每小时数据提取的示例数据:

2016-03-30|00:54:46,060|[WARNING]
2016-03-30|00:55:46,318|[OK]
2016-03-30|00:55:46,318|[OK]
2016-03-30|02:42:13,691|[UNKNOWN]
2016-03-30|07:53:16,356|[CRITICAL]
2016-03-30|08:56:41,410|[WARNING]

1 个答案:

答案 0 :(得分:0)

日期的输出是一个字符串,其中有一个空格 - 即

$ date -d "-2 hour" +"%Y-%m-%d %H"
2016-03-20 18

因此需要引用它才能将其与文件中的某些内容进行比较。

awk '"$date_file" >= "$date_minus_one" && "$date_file" <= "$date_minus_two"'

这可以解决一些问题,根据您的描述$ date_file,$ date_minus_one等是常量,所以没有会在执行期间发生变化,表达式将会要么永远是真的要么总是假的。