linux - 使用 awk 在文本文件中查找匹配日期范围的数据

标签 linux bash date

我有一个文本文件,其中包含来自五个传感器的日期戳和温度值,并且每十分钟该文件就会更新一行新数据。

这是数据文件的示例 - 第 1 列和第 2 列是日期和时间,第 3 列到 7 列是温度值:

31-12 04:40 19.6 20.5 18.3 21.3 12.5
31-12 04:50 19.6 20.4 18.3 21.3 12.7
31-12 05:00 19.5 20.4 18.2 21.2 12.6
31-12 05:10 19.5 20.4 18.2 21.2 12.5
31-12 05:20 19.5 20.4 18.5 21.2 12.1

如何使用 awk 从数据文件中提取过去 24 小时、过去 7 天、过去 28 天和过去 365 天的记录?

最佳答案

坏消息:标准 awk 没有日期处理功能,而日期处理对于 shell 脚本来说是一件碰运气的事情。 GNU 和 BSD 版本的 date 命令都可以使用 date 命令来检查日期,但两者使用完全不同的语法来执行此操作。

如果您使用的是 gawk 或带有 awk 的 Linux,您可以尝试 mktime 函数:

date="20141225011522"   # December 25, 2014 at 1:15:22
date_in_seconds = mktime( date )

您需要对日期进行一些重新格式化,但完成后,您将返回自纪元(通常为 1970 年 1 月 1 日)以来的秒数。

顺便说一句,您需要包含您尝试过的示例以及您在代码本身中遇到的问题,否则您的问题将被关闭。

关于linux - 使用 awk 在文本文件中查找匹配日期范围的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710914/

相关文章:

mysql - Solr 日期字段不存储时间

ios - dat转换IOS报错

linux - BusyBox:制作过程中出错

html - sed:使用正则表达式去掉 <img ...> 部分

bash - 使用 sed 获取字符串的第一个单词

bash - 从 bash 脚本设置 JAVA_HOME

mysql - (MySQL) 连接一个具有单独日期的表和另一个具有日期范围的表

linux - 如何创建 64 位 inode?

linux - 执行 'sh script.sh/path/foo.py' 时自动完成不起作用

linux - 比较二进制文件以导出文本文件并查找自上次导出后哪些二进制文件已更改或下一个