Как добавить строку, соответствующую шаблону, к предыдущей строке

Вопрос или проблема

Попытка отформатировать файл tcpdump.txt:

  • Строки, содержащие дату, интерфейс, протокол и т. д.
  • Строки, содержащие сетевой источник устройство.порт, устройство назначения.порт, флаги и т. д.
  • Лишние строки (игнорировать)

Ввод:

  • 2024-10-02,15:23:17.961802,br0,Out,IP,,
  • device1-LAN.522,>,device2-LAN.56248:,Flags,,
  • 2024-10-02,15:23:17.961821,eth5,Out,IP,,
  • 0x0010: 0034 844a 4000 3f06 8fe9 c0a8 330b acd4 .4.J@.?…..3…
  • 0x0030: 01ff 00ab 0000 0101 080a e9d3 ecca 22d6 …………..”.
  • 2024-09-27 11:18:30.389705, eth0,Out, IP,,
  • device1-LAN.522,>,device2-LAN.56248:,Flags,,
  • 2024-10-02,15:23:17.962931,br0,Out,IP,,
  • device1-LAN.522,>,device2-LAN.56248:,Flags,,
  • 2024-09-27 11:18:30.445834 eth0 Out
  • 0x0000: 00e0 6715 cf81 08bf b8c9 a448 0800 4500 ..g……..H..E.
  • 0x0020: 8708 87ce 01bb 04f8 16eb 3b51 8be8 8018 ……….;Q..
  • ещё строки …

Цель состоит в том, чтобы объединить строки, содержащие дату, интерфейс, протокол и т. д., со строками, содержащими сетевой источник устройство.порт, устройство назначения.порт, флаги и т. д.:

Вывод:

  • 2024-10-02,15:23:17.961802,br0,Out,IP,,device1-LAN.522,>,device2-LAN.56248:,Flags,,
  • 2024-10-02,15:23:17.961821,eth5,Out,IP,,device1-LAN.522,>,device2-LAN.56248:,Flags,,
  • 2024-10-02,15:23:17.962931,br0,Out,IP,,device1-LAN.522,>,device2-LAN.56248:,Flags,,
  • ещё строки …

Существует ли решение на awk для такого типа сопоставления шаблонов и объединения строк?

Ответ или решение

Для решения задачи по слиянию строк в файле tcpdump.txt, можно использовать awk, который является мощным инструментом для обработки текстовых данных. Ваша задача состоит в том, чтобы объединить строки, содержащие информацию о дате, интерфейсе и протоколе, с последующими строками, содержащими информацию о сетевых источниках, портах и флагах.

Ниже приведен пример сценария awk, который выполняет указанную задачу:

awk -F, '
    # Если строка соответствует формату даты, интерфейса и протокола
    /^[0-9]{4}-[0-9]{2}-[0-9]{2},[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{6},/ {
        if (prev_line != "") {
            # Если есть предыдущая строка, объединяем её с текущей строкой
            print prev_line "," $0
            # Сбрасываем предыдущую строку
            prev_line = ""
        } else {
            # Сохраняем текущую строку для последующего объединения
            prev_line = $0
        }
        next
    }

    # Если строка соответствует формату устройства и порта
    /^[^,]+-[^,]+\.[0-9]+,>,[^,]+-[^,]+\.[0-9]+:.*$/ {
        # Если предыдущая строка установлена, добавляем к ней
        if (prev_line != "") {
            prev_line = prev_line "," $0
        }
        next
    }

    # Игнорируем остальные строки
' tcpdump.txt

Объяснение сценария:

  1. Задание разделителя полей: -F, указывает на использование запятой в качестве разделителя полей.

  2. Обработка строк с датой и протоколом:

    • Регулярное выражение проверяет, соответствует ли строка формату даты (ГГГГ-ММ-ДД), времени, интерфейса и протокола.
    • Если такая строка найдена, проверяется, существует ли предыдущая строка (сохраняемая в prev_line). Если она существует, обе строки объединяются и выводятся.
    • Если предыдущей строки нет, текущая строка сохраняется в prev_line.
  3. Обработка строк с устройствами и портами:

    • Регулярное выражение проверяет, соответствует ли строка формату, содержащему информацию о сетевых устройствах и портах.
    • Если такая строка найдена, она добавляется к prev_line, если последняя строка все еще сохраняется.
  4. Игнорирование остального: Остальные строки (включая лишние данные) просто игнорируются.

Запуск сценария:

Чтобы выполнить данный сценарий, вам нужно сохранить его в файл (например, script.awk) и запустить его с помощью команды:

awk -f script.awk tcpdump.txt > output.txt

Данный подход позволяет эффективно обрабатывать текстовый файл, объединяя соответствующие строки, исключая лишние данные, в соответствии с вашими требованиями. Выходной файл output.txt будет содержать нужные объединенные строки.

Оцените материал
Добавить комментарий

Капча загружается...