9

各 http リクエストのタイムスタンプを含むサーバー アクセス ログがあり、毎秒のリクエスト数を取得したいと考えています。sed、およびを使用してcut -c、これまでのところ、ファイルを次のようなタイムスタンプだけに切り詰めることができました。

2008 年 9 月 22 日 20:00:21 +0000 2008 年 9 月 22
日 20:00:22 +0000 2008 年
9 月 22 日 20:00:22 +0000 2008 年 9 月
22 日 20:00:22 +0000
22- 2008 年 9 月 20:00:24 +0000
2008 年 9 月 22 日 20:00:24 +0000

私が取得したいのは、それぞれの一意のタイムスタンプがファイルに表示される回数です。たとえば、上記の例では、次のような出力を取得したいと考えています。

2008 年 9 月 22日 20:00:21 +0000: 1 2008 年
9 月 22 日 20:00:22 +0000: 3 2008 年
9 月 22 日 20:00:24 +0000: 2

sort -uタイムスタンプのリストを一意のトークンのリストにフィルターして、grepのように使用できることを期待していました

grep -c -f <file containing patterns> <file>

しかし、これは一致する行の総合計の 1 つの行を生成するだけです。

これは、いくつかのユーティリティをつなぎ合わせて 1 行で実行できることは知っていますが、どのユーティリティかはわかりません。誰でも知っていますか?

4

6 に答える 6

32

探していると思います

uniq --count

-c, --count プレフィックス行を出現回数でカウント

于 2008-09-24T17:04:23.227 に答える
1

連想配列で AWK を使用することは、このような問題に対する別の解決策になる可能性があります。

于 2008-09-24T17:08:21.080 に答える
1

最初に指定した形式で出力したい場合に備えて(最後に出現回数を付けて):

uniq -c logfile | sed 's/\([0-9]+\)\(.*\)/\2: \1/'
于 2008-09-24T17:15:51.623 に答える
0

awk の使用:

cat file.txt | awk '{count[$1 " " $2]++;} \
                    END {for(w in count){print w ": " count[w]};}'
于 2008-10-02T08:11:25.943 に答える
-2

おそらくxargsを使用しますか?ここで頭の中ですべてをまとめることはできませんが、ソート -u で xargs を使用して、一意の秒ごとに元のファイルを grep し、 wc -l を実行して番号を取得できるようにします。

于 2008-09-24T17:04:50.777 に答える