awk时间戳大于

时间:2017-04-18 15:59:46

标签: linux awk

我有一个文件,我试图只打印时间戳大于或等于22:01的行,但我似乎无法让它正常工作。从下面可以看出它仍然打印8:05的时间戳?可能是一个学校男孩的错误,但我正在努力使这个工作,所以任何指向正确的方向将不胜感激。

.poligonArea{

  fill:black;
  filter: url('#mySVGfilter');
}

谢谢,

马特

1 个答案:

答案 0 :(得分:0)

问题已在评论中正确识别。您正在与字符串进行比较,该字符串触发字符串比较。在字符串比较中," 8:05:42:710"大于" 22:01"因为第一个字符" 8"大于" 2"。

一种选择是将时间分成单独的组件并改为使用数字比较:

awk -F: '$1 >= 22 && $2 >= 1' /tmp/m1.out

如果您的逻辑更复杂,例如您的文件包含更多字段,并且您不想更改字段分隔符,您可以使用split

awk '{ split($1, pieces, /:/) } pieces[1] >= 22 && pieces[2] >= 1' file

使用前导零填充字段有点棘手,并且在您的示例中不是必需的,因为在小时内只有一位数的时间永远不会超过22。

如果可能,最好的办法是使用与字符串比较兼容的时间戳,尽管这需要控制生成您正在使用的文件的任何内容。