1

对不起,我的英语不好。

我有一个来自 Web 服务器的日志文件,有 120,000 行。

输入文件示例:

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 地址与第二行中的 IP 进行比较,同时将包含 Web 浏览器版本的最后一个框与第二行中的版本进行比较。第二行与第三行等。

如果第一个 IP 与第二个 IP 相同,并且第一个版本与第二个版本相同,则添加到行尾信息示例 #1(这意味着它是第一个用户)

如果 IP 或版本不同,则添加到第 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 回答