ファイル内の14日より古い日付を見つけるGrep

ファイル内の14日より古い日付を見つけるGrep

14 days次のより古いメッセージ数に対してファイルをgrepし、結果数を返す値を持つ方法を見つけようとします。

今日の日付を例にしてみましょう20160616$grep 'Put Date' filename:

Put Date     :'20160425'
Put Date     :'20160501'
Put Date     :'20160514'
Put Date     :'20160609'
Put Date     :'20160610'
Put Date     :'20160616'

結果は次のように表示する必要があります。 14日を超えて、次の内容が表示されますreturn 3

Put Date     :'20160226'
Put Date     :'20160501'
Put Date     :'20160514'

答え1

あなたが使用できる:

awk -v threshold=$(date "--date=$(date) -14 day" +%Y%m%d) -F "'" '$2 < threshold' filename | wc -l

これは次の解決策に似ています。この投稿日付がインラインで計算されるだけです。

メモ: filename名前に変更する必要がありますあなたのファイル

また、境界日付規則に注意する必要があります(境界条件の確認)。

答え2

awkソリューションが公開されたので、grep次のようにソリューションを作成します。

まず、見たくない日付を1行に1つずつ含むファイルを作成します。これには項目が15個だけなので、多くの処理が必要なく高速です。次に、date[BSD]システムに次のようにインストールされたGNUが必要ですgdate

i=0
while (( i < 15 )); do
    gdate -d "now -$(( i++ )) days" +"%Y%m%d"
done >dates_to_skip

完了すると、単に次の項目のフィルタとして使用できますfgrep -v

fgrep -v -f dates_to_skip mydata

関連情報