2017-10-17 200 views
1

文件我有一个文件格式,如: -选择记录由日期

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

我想在过去的2个月内,基于列4日的条件来选择记录(100万左右),如。 2解决方案: -

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

2)直接进行日期比较。

你可以建议哪一个更好。另外,我无法找到第二个使用shell脚本的解决方案,因此任何提示都会很有用。

+0

的问题不清楚,阐述它。比较的结果应该是什么?应该比较哪些列? – RomanPerekhrest

回答

0

awk MacOSX上的解决方案coreutils已安装。要在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 
+0

是否有任何问题在终端(mac)上使用它。 – Sanchay

+0

MacOSX使用日期的BSD版本。你将不得不安装'coreutils'来获得GNU日期。 'brew install coreutils'将在这里完成。接下来,您必须将'date'调用更改为'gdate'。我要根据这个答案来修改我的答案。 –