2017-04-18 7 views
2

私は22:01以上のタイムスタンプの行だけを印刷しようとしているファイルがありますが、正しく動作するように見えません。下に示すように、8:05のタイムスタンプも印刷されますか?おそらく学校の男の子のエラーですが、私は正しい方向の任意のポインタが高く評価されるように、この作業を得るために苦労しています。awwタイムスタンプより大きい

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

時間フィールドをゼロパッドしてもう一度お試しください。 –

+0

@ fernand0 - それを答えてください! (そして比較を正しく行う方法を説明してください) – ghoti

答えて

0

問題が正しくコメントで確認されています。文字列の比較をトリガする文字列と比較しています。文字列の比較では、最初の文字「8」が「2」より大きいため、「8:05:42:710」は「22:01」より大きくなります。例えば、

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

をあなたのロジックが複雑な場合:

1つのオプションは個別のコンポーネントに時間を分割し、代わりに数値比較を使用することですあなたのファイルには、複数のフィールドを持って、あなたはフィールドセパレータを変更したくない、あなたはsplitを使用することができます:先行ゼロでフィールドをパディング

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

は、もう少しトリッキーで、あなたの例では必要ありません時間内の1桁の数字だけの時間は22より大きくなることはありません。

可能な場合は、文字列比較と互換性のあるタイムスタンプを使用することをお勧めします。あなたが作業しているファイル。

関連する問題