2017-10-17 246 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'。我要根據這個答案來修改我的答案。 –