2017-01-02 5 views
2

いいえの数を取得しようとしています。指定された日付範囲で印刷された行の数。私は何を見つけたいん入手できません。日付範囲用に印刷された行数

grep -inr "\[HSM \]Handle Identity Request. Send Identity Response. timeout: 1550s" *ActNac* 
ActNacd.txt:47:2017-01-02 09:10:13 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-20_20-39-18.txt:171:2016-12-19 13:23:48 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-20_20-39-18.txt:217:2016-12-19 14:27:26 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-26_09-44-47.txt:47:2016-12-25 19:26:13 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-26_09-44-47.txt:91:2016-12-25 20:30:38 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-27_07-32-25.txt:47:2016-12-26 11:08:28 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-27_18-06-29.txt:47:2016-12-27 07:35:55 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-30_08-22-16.txt:48:2016-12-28 18:04:19 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2017-01-02_06-56-52.txt:47:2016-12-30 08:24:19 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2017-01-02_09-07-23.txt:47:2017-01-02 06:59:33 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 

は、ここに私の入力と出力されます。 2017年12月20日から2017年12月30日までの間に印刷された行。以来、

grep -inr "\[HSM \]Handle Identity Request. Send Identity Response. timeout: 1550s" *ActNac* | sed -n '/2016-12-19/,/2017-12-27/p'" 

これは、任意の出力を与えるものではありません:

開始日と終了日は、私が

grep -inr "\[HSM \]Handle Identity Request. Send Identity Response. timeout: 1550s" *ActNac* | sed -n '/2016-12-20/,/2017-12-27/p'" 

のようにsedコマンドを使用しますので、もし、確認されていませんが、私は次のように入力を提供する場合開始日が入力日のいずれの行とも一致しません。日付が2016-12-19のログファイルはありません。

sed/awk/grepコマンドを使用すると、入力日の範囲で行数を取得する方法はありますか。

+1

番目を取得するにはe何から出力された行数であれば、出力を 'wc -l'にパイプするだけです。 –

+0

私は20-27/12から適切な行をフィルタリングしなければなりません。カウントを取得するにはwc -lを使用します。 –

答えて

2

awkを単独で使用できます。

実際のログを取得するには、一人で

awk -F'[: ]' '$3 >= "2016-12-16" && $3 <= "2016-12-26 && NR>1"{count++;}END{print count}' newfile 
5 

をカウントを取得するには、私のように{count++;}END{print count}句を使用し、カウントを取得するには、ログに実際に存在日付ではない、

awk -F'[: ]' '$3 >= "2016-12-22" && $3 <= "2016-12-29" && NR>1' newfile 
old_ActNacd_2016-12-26_09-44-47.txt:47:2016-12-25 19:26:13 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-26_09-44-47.txt:91:2016-12-25 20:30:38 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-27_07-32-25.txt:47:2016-12-26 11:08:28 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-27_18-06-29.txt:47:2016-12-27 07:35:55 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 
old_ActNacd_2016-12-30_08-22-16.txt:48:2016-12-28 18:04:19 - [HSM ]Handle Identity Request. Send Identity Response. timeout: 1550s 

を使用していました最初のコマンドで。

+0

これは4つだけのログ(2016-12-26の2つのログと2つのログ2016-12-27)。しかしそれは印刷物10です。入力ファイルに存在する行の数。 –

+0

ありがとうございました。 –

+0

努力をいただきありがとうございます。上記の図では、終了日が2016-12-29であるため、ログに2016-12-30のログを含めてはいけません。同様に、startdateが2016-12-19の場合、2016-12-20のログのみが含まれます。答えは非常に近いです。それを確認する境界条件を含めてください。ありがとう!!!!! –

0

あなたの持つ難しさは、行を数えることとは関係ありません。簡単ですが、データをwc -lにパイプするだけですが、比較の日付が付いています。日付を比較したい場合、最も簡単なことは、比較を簡単にする合理的な表現に変換することです。例えば、エポック時間。 perlで簡単に行う方法:

perl -mTime::Piece -ne 'm/[^:]*:[^:]*:([-0-9]*) /; 
    $t=Time::Piece->strptime($1, "%Y-%m-%d"); print if $t > 1482192000;' input 

これは、日付が1482192000(12月20日の深夜GMT)を超えた行を出力します。いずれか、それらを数えるperlでそれらをカウントする:トイレへ

perl -mTime::Piece -nE 'm/[^:]*:[^:]*:([-0-9]*) /; 
    $t=Time::Piece->strptime($1, "%Y-%m-%d"); $v++ if $t > 1482192000; 
    END{say $v}' input 

か、単にパイプを:

perl -mTime::Piece -ne 'm/[^:]*:[^:]*:([-0-9]*) /; 
    $t=Time::Piece->strptime($1, "%Y-%m-%d"); print if $t > 1482192000;' input | 
wc -l 
0

すべての行は、日付文字列を持っている場合、あなたはまで(grep -Ec "^2016-12-2" *ActNac*
ような何かを行うことができます2016- 30日を除く12-30)、

または

grep -Ec "^2016-12-(2|30)" *ActNac* 
関連する問題