linux - 使用 Shell 脚本提取 1 个月前的数据

标签 linux shell awk

我需要使用 shell 脚本从一个巨大的日志文件中查找比当前日期早 1 个月的条目。日志条目日期位于每行的第三个字段中。 这是我的示例日志文件:

0114374510,OK,10/23/2017 9:22:50 AM,0016692200,OK
0112364510,OK,10/23/2017 9:22:50 AM,0016692200,OK
0112364510,TX,10/21/2017 9:10:00 AM,0016692200,OK
0115364510,TX,10/21/2017 10:52:00 AM,0016692200,OK
0112368979,OK,7/29/2016 10:25:00 AM,0000718374,OK
0113368979,OK,7/29/2016 12:50:00 PM,0000718374,OK
0112368979,TX,9/16/2015 10:57:00 AM,0033545820,OK

谢谢!

最佳答案

这是一个解决方案,使用 grep 来匹配文件中的某些行,并使用 date 来操作日期。

Linux版本

grep -E "$(date --date='-1 month' '+%m')/[0-9]+/$(date --date='-1 month' +'%Y') <your_file>"
  • date --date='-1month' '+%m' - 当前日期减去 1 个月并打印月份
  • [0-9]+ - 匹配任何数字的正则表达式(在我们的例子中是任何一天)
  • $(date --date='-1 Month' +'%Y') - 当前日期减去 1 个月并打印年份

macOS 版本

grep -E "$(date -v -1m '+%m')/[0-9]+/$(date -v -1m +'%Y') <your_file>"
  • date -v -1m '+%m' - 当前日期减去 1 个月并打印月份
  • [0-9]+ - 匹配任何数字的正则表达式(在我们的例子中是任何一天)
  • date -v -1m +'%Y' - 当前日期减去 1 个月并打印年份

关于linux - 使用 Shell 脚本提取 1 个月前的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47409405/

相关文章:

linux - 某些进程的 map 文件为空

c++ - 编译 STL map 插入时出现问题

c - 套接字未收到消息 AF_UNIX

android - 尝试在 Xperia E C1504 上打开/dev/radio0 返回 EBUSY

linux - 将字符串和列表的组合转换为 csv 文件

linux - 使用 awk 输出运行 mysqldump

linux - 退出 bash 脚本但不退出终端的任何方式

c++ - 通过linux终端将数据发送到另一个进程的stdin

linux - 从原始数组创建一个数组,但基于代码运行的位置?

linux - Awk 问题,一次在多个文件中重复行。