1

私の悪い英語でごめんなさい。

120,000 行の Web サーバーのログ ファイルがあります。

入力ファイルの例:

10.160.0.10;16.11.2011 12:56;/;-;"Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0" 10.160.0.100;14.11.2011 7:22;/;-; "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0" 10.160.0.100;14.11.2011 10:45;/;-;"Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/ 20100101 Firefox/4.0" 10.160.0.100;14.11.2011 10:53;/;-;"Mozilla/4.0 (互換性あり; MSIE 8.0; Windows NT 5.1; Trident/4.0)"

最初の行の IP アドレスと 2 行目の IP を比較すると同時に、Web ブラウザーのバージョンを含む最後のボックスと 2 行目のバージョンを比較する必要があります。そして2行目と3行目など。

最初の IP が 2 番目の IP と同じで、最初のバージョンが 2 番目のバージョンと同じである場合は、行末情報例 #1 に追加します (これは最初のユーザーであることを意味します)。

IP またはバージョンが異なる場合は、行 #2 (2 番目のユーザー) の末尾に追加します。

IP アドレスと User-Agent フィールドに基づいてユーザーを識別します (さまざまなバージョンの Web ブラウザーに基づいて)。

出力ファイルの例:

10.160.0.10;16.11.2011 12:56;/;-;"Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0";#1 10.160.0.100;14.11.2011 7:22;/ ;-;"Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0";#2 10.160.0.100;14.11.2011 10:45;/;-;"Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0";#2 10.160.0.100;14.11.2011 10:53;/;-;"Mozilla/4.0 (互換性あり; MSIE 8.0; Windows NT 5.1; Trident/4.0)";# 3

これを行う方法はありますか?

どの方法を使用しますか?

ご協力ありがとう御座います。

4

2 に答える 2

2

これは完全ではなく、最適に近いものでもありませんが、基本的に必要なものはすべて揃っています。

List list = new ArrayList();
Scanner in = new Scanner(file);
while(in.hasNext()) {
    String line = in.nextLine();
    String[] splitLine = line.split(";",5);
    String identifier = splitLine[0] + splitLine[4];
    if(list.contains(identifier)) {
        line = line + " #" + (list.indexOf(identifier) + 1));
    }
    else {
        line = line + " #" + (list.size() + 1);
        list.add(identifier);
    }
    System.out.println(line);
}
于 2012-11-01T18:06:23.377 に答える
0

String.splitメソッド、;分割の文字として使用します。

于 2012-11-01T12:00:20.653 に答える