
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