首页 > 解决方案 > 过滤文本文件中的日期

问题描述

我有一个文本文件,其中包含以下格式的数据。我们如何只打印那些日期距当前日期不到 10 天的行?

样本.txt

system system_data8 Thu Jul 29 22:36:38 2021
system system_data9 Wed Jan 24 14:43:52 2018
system system_data3 Tue Jan 23 20:25:17 2018
system system_data2 Fri Mar 09 20:37:05 2018
system system_data5 Fri Mar 09 22:02:31 2018

预期产出

system system_data8 Thu Jul 29 22:36:38 2021

我正在尝试类似下面的东西,但它不起作用。

awk -F ' ' '{printf("%s,%s,",$1,$2);"date +%F -d "$3" "$4" "$5" "$6" "$7;}' sample.txt

标签: shellawk

解决方案


GNUawk有时间函数:

$ gawk -v days=10 'BEGIN {max = days*86400; now = systime()}
NF>3 {
  mn = (index("JanFebMarAprMayJunJulAugSepOctNovDec",$(NF-3)) + 2)/3
  dt = $NF " " mn " " $(NF-2) " " gensub(/:/," ","g",$(NF-1))
  diff = now - mktime(dt)
  if (-max < diff && diff < max)
    print
}' file
system system_data8 Thu Jul 29 22:36:38 2021

推荐阅读