2017-12-09 5 views
1

私はこれに近いと思うし、同様の質問を見たが、私が望むように動作させることができませんでした。だから、私はいくつかのログファイルを持っており、私はいくつかの異なるサービス呼び出しの発生を日付で数えたいと思います。grep複数のファイルが一意のカット数を取得

grep -E "invoking webservice" *.log* | cut -d ' ' -f1 -f11 | sort | uniq -c 

しかし、これは返さ:

は、最初に私はカットはちょうど私のログファイルに固有の最初の要素(日)と11の要素(サービスコールの名称)を、取得することで、以下試してみました

5 log_1.log:2017-12-05 getLegs() 
10 log_1.log:2017-12-05 getArms() 
7 log_2.log:2017-12-05 getLegs() 
13 log_2.log:2017-12-04 getLegs() 

私が本当にしたいことは次のとおりです:

12 2017-12-05 getLegs() 
10 2017-12-05 getArms() 
13 2017-12-04 getLegs() 

私は試験を見てきたようなもの最初に猫がどこにいるのですか?しかし、同じ問題のように見えます。

cat * | grep -E "invoking webservice" *.log* | cut -d ' ' -f1 -f11 | sort | uniq -c 

私は間違っていますか?いつものように、ありがとう!

答えて

2

あなたの問題は、grepがファイル名に一致する行の前に付いているようです。 (grepは、複数のファイル名が結果を明確にするために、指定されたこの動作を持っています。)あなたはファイル名を印刷しないようにgrep-hを渡すことができます。それが使用されているので、私は、-Eフラグを落とし

grep -h "invoking webservice" *.log | cut -d ' ' -f1 -f11 | sort | uniq -c 

注意拡張正規表現のサポートを有効にし、あなたの例ではそれを必要としません。

また、catを使用してファイルの内容を標準出力にダンプし、それをgrepにパイプすることができます。それは、grepのファイル名パラメータの必要性を取り除くので、うまくいくでしょう:

cat *.log | grep "invoking webservice" | cut -d ' ' -f1 -f11 | sort | uniq -c 
+0

笑とても簡単です。ドキュメントを読む必要があります。ありがとう! – WhitneyChia

関連する問題