awk匹配错误的问题

扎瓦菜鸟 2018-04-14 04:56:28
这样一条命令:
awk '$1$2<"2018-04-1102:43:17,780" && $1 ~ "20[1-2][0-9]-[0-1][0-9]-[0-3][0-9]"' hahaha.log | tail -n 1
目的是找到一个日志文件里时间在2018-04-11 02:43:17,780之前的最后一条记录
----------------------------------------------
首先来看一下hahaha.log:

vi hahaha.log
得到的第一行是满屏的^@^@^@^@^@,
第二行是
2018-04-11 03:29:06,542 INFO [Job Schedule Executor] JobScheduleService:188 | No stream on worker now

head -n 1 hahaha.log
得到的是
2018-04-11 03:29:03,541 INFO [Job Schedule Executor] JobScheduleService:188 | No stream on worker now
注意这个和上面vi的^@之后一行不一样,而且这条记录应该在上面那条的前面(时间顺序)
且这个忽略了 vi 出来的^@

cat hahaha.log | head -n 2
2018-04-11 03:29:03,541 INFO [Job Schedule Executor] JobScheduleService:188 | No stream on worker now
2018-04-11 03:29:06,542 INFO [Job Schedule Executor] JobScheduleService:188 | No stream on worker now
即前面得到的结果的时间顺序排序,也忽略了vi出来的^@
-----------------------------------------------
回到这条命令
awk '$1$2<"2018-04-1102:43:17,780" && $1 ~ "20[1-2][0-9]-[0-1][0-9]-[0-3][0-9]"' hahaha.log | tail -n 1

从cat出的前两行结果以及我awk的条件来看,文件的第一条记录已经在我awk条件里的时间之后,也就是说不存在满足awk条件的记录,awk应该不输出任何东西。

但是它实际输出的是
2018-04-11 03:29:03,541 INFO [Job Schedule Executor] JobScheduleService:188 | No stream on worker now
即cat出的第一行,而这一行在vi中没有显示。
-----------------------------------------------
问题描述完了,不知各位有没有看懂。想问问这返回错误结果的原因是什么。谢谢!
...全文
833 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧