Shell 按日期从文件中选择记录

Shell 按日期从文件中选择记录,shell,date,awk,Shell,Date,Awk,我的文件格式如下:- 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脚本找到第二个解决方案,因此任何提示都会很有用。awk安装了coreutils的M

我的文件格式如下:-

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脚本找到第二个解决方案,因此任何提示都会很有用。

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
}
然后:


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
}
然后:


问题不清楚,请详细说明。比较的结果应该是什么?应该比较哪些栏目?问题不清楚,请详细说明。比较的结果应该是什么?应比较哪些列?在终端(mac)上使用此选项是否存在任何问题。MacOSX使用BSD版本的日期。您必须安装
coreutils
才能掌握GNU日期<代码>brew安装coreutils将在此处完成。接下来,您必须将
date
调用更改为
gdate
。我将对我的答案进行调整,以反映这一点。在终端(mac)上使用此选项是否有任何问题。MacOSX使用BSD版本的date。您必须安装
coreutils
才能掌握GNU日期<代码>brew安装coreutils将在此处完成。接下来,您必须将
date
调用更改为
gdate
。我将根据这一点修改我的答案。
# awk -v d="-9 days" -f tst.awk  file
10077083725 09-OCT-17   35 09-OCT-17