【问题标题】:Select Records From File by Date按日期从文件中选择记录
【发布时间】:2018-03-28 20:13:04
【问题描述】:

我的文件格式如下:-

10077083725 06-OCT-17   32 06-OCT-17
10077083725 09-OCT-17   35 09-OCT-17

我想根据第 4 列中的日期条件选择记录(大约 100 万条),例如过去 2 个月内的记录。 2个解决方案:-

1) 将日期的格式转换为:-20170610,然后使用 awk 进行简单的字符串比较。

2) 直接做日期比较。

你能推荐哪个更好吗?此外,我无法找到第二个使用 shell 脚本的解决方案,因此任何提示都会很有用。

【问题讨论】:

  • 问题不清楚,详细说明。比较的结果应该是什么?应该比较哪些列?

标签: shell date awk


【解决方案1】:

awk 解决方案在安装了 coreutils 的 MacOSX 上。要在 linux 上使用它,请将 gdate 更改为 date。我的答案是您的两种解决方案的组合:

# cat tst.awk
BEGIN{d=conv(d)}
d <= conv($4)
func conv(str) {
   cmd = "gdate -d '" str "' +'%Y%m%d'"
   res = ((cmd | getline line) > 0 ? line : "")
   close(cmd)
   return res
}

用作输入:

# cat file
10077083725 06-OCT-17   32 06-OCT-17
10077083725 09-OCT-17   35 09-OCT-17

然后:

# awk -v d="-9 days" -f tst.awk  file
10077083725 09-OCT-17   35 09-OCT-17

【讨论】:

  • 在终端(mac)上使用这个有什么问题吗?
  • MacOSX 使用 BSD 版本的日期。您必须安装 coreutils 才能掌握 GNU 日期。 brew install coreutils 会在这里做。接下来,您必须将date 调用更改为gdate。我将调整我的答案以反映这一点。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
相关资源
最近更新 更多