Разбор файла журнала в формате CSV - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь разработать небольшой кусочек кода, который поможет мне разграничить файл журнала, в котором хранится большое количество маршрутов трассировки на разные IP-адреса, которые были отправлены в течение недели.

Я надеюсь наразделите их, используя теги --- --- START --- и '--- END ---' в начале и в конце каждого маршрута трассировки.Пример следующий:

--- START ---
Mon Mar 12 22:45:05 GMT 2012
traceroute to xxxxxxx (xxxxxxxx), 30 hops max, 60 byte packets
1  xxxxxxx (xxxxx)  1.085 ms  1.662 ms  2.244 ms
2  xxxxxxxx (xxxxxxx)  0.792 ms  0.782 ms  0.772 ms
3  xxxxxxxxx (xxxxxxxxx)  8.545 ms  9.170 ms  9.644 ms
4  etc
5  etc
--- END ---
--- START ---
Mon Mar 12 22:45:05 GMT 2012
traceroute to xxxxxxxxx (xxxxxxxx), 30 hops max, 60 byte packets
1  139.222.0.1 (xxxxxxxxx)  0.925 ms  1.318 ms  1.954 ms
2  10.0.0.1 (xxxxxxxx)  0.345 ms  0.438 ms  0.496 ms
3  172.16.0.34 (xxxxxxxxx)  0.830 ms  2.553 ms  0.809 ms
4 etc
5 etc
6 etc
--- END ---

Может ли кто-нибудь помочь мне в этом, в matlab или java ... Я также пытаюсь подсчитать количество прыжков, которые делает каждый маршрут трассировки.Это число, указанное перед меткой --- END --- ...

Любая помощь будет принята с благодарностью,

Приветствия.

1 Ответ

2 голосов
/ 19 марта 2012

Быстрый и грязный пример:

import java.io.*;
import java.text.*;
import java.util.*;
import java.util.regex.*;

public class Main
{
  private static class Record
  {
    public Date date;

    public String to;
    public int hops;
    public int packetSize;

    public String toString()
    {
      return date + " ::: " + to + ", " + hops + " hops, "
        + packetSize + " bytes";
    }
  }

  public static void main(String[] args) throws Exception
  {
    Scanner s = new Scanner(new FileReader(new File("input.txt")));

    Record currentRecord = null;
    ArrayList<Record> list = new ArrayList<Record>();

    while (s.hasNextLine()) {
      String line = s.nextLine();

      if ("--- START ---".equals(line)) {
        currentRecord = new Record();

      } else if ("--- END ---".equals(line)) {
        list.add(currentRecord);
        currentRecord = null;

      } else if (currentRecord.date == null) {
        currentRecord.date = new SimpleDateFormat(
          "EEE MMM dd HH:mm:ss zzz yyyy").parse(line);

      } else if (line.startsWith("traceroute to ")) {
        Pattern p = Pattern.compile(
          "traceroute to ([^ ]+) [^,]+, ([^ ]+) hops max, ([^ ]+) byte packets");
        Matcher m = p.matcher(line);

        if (m.matches()) {
          currentRecord.to = m.group(1);
          currentRecord.hops = Integer.parseInt(m.group(2));
          currentRecord.packetSize = Integer.parseInt(m.group(3));
        }
      }
    }

    for (int i = 0; i < list.size(); i++)
      System.out.println(list.get(i).toString());
  }

}

Вывод:

Tue Mar 13 04:15:05 GMT+05:30 2012 ::: 203.98.69.105, 30 hops, 60 bytes
Tue Mar 13 04:15:05 GMT+05:30 2012 ::: 62.193.36.27, 30 hops, 60 bytes

Я указываю вам в разных направлениях (Scanner, Pattern, SimpleDateFormat и т. Д.).Для отдельных элементов «ворот» вы также можете использовать String.split(), используя " " (два пробела) в качестве разделителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...