2017-04-18 65 views
2

我有一個文件,我試圖只打印時間戳大於或等於22:01的行,但我似乎無法讓它正常工作。正如下面可以看到它仍然打印8:05時間戳?可能是一個學校男孩的錯誤,但我努力得到這個工作,所以任何指針在正確的方向將不勝感激。Awk時間戳大於

cat /tmp/m1.out | awk '$1>="22:01"' 

    22:05:42:710 
    23:05:42:710 
    8:05:42:710 
    8:05:42:710 
    8:05:42:710 
    8:05:42:710 
    8:05:42:710 

感謝,

馬特

+2

您使用的是「22:01」,所以我認爲這是一個字符串比較,然後'8'大於'22'。 – fernand0

+1

Zeropad小時字段,然後重試。 –

+0

@ fernand0 - 讓它成爲答案! (並解釋如何得到正確的比較結果。) – ghoti

回答

0

該問題已經在評論被正確識別。您正在比較一個字符串,這會觸發字符串比較。在字符串比較中,「8:05:42:710」大於「22:01」,因爲第一個字符「8」大於「2」。

一種選擇是時間分割成單獨的部件,並使用數值比較來代替:

awk -F: '$1 >= 22 && $2 >= 1' /tmp/m1.out 

如果您的邏輯是更復雜的,例如您的文件有更多的領域,你不想改變字段分隔符,你可以使用split

awk '{ split($1, pieces, /:/) } pieces[1] >= 22 && pieces[2] >= 1' file 

填充領域具有前導零的是一個小更棘手,是不是在你的榜樣有必要,因爲時間只有一個數字的時間永遠不會大於22.

如果可能的話,最好的辦法是使用與字符串比較兼容的時間戳,儘管這需要控制任何產生您正在使用的文件。