Анализ журналов Apache из командной строки (журналов с несколькими разделителями)

Вы можете использовать libudev , это может быть то, что вы ищете.

0
08.03.2021, 11:05
2 ответа

Использование GNU awkдляFPATи при условии отсутствия внутренних двойных кавычек внутри двойных -кавычек или квадратных скобок внутри скобок:

awk -v FPAT='"[^"]*"|\\[[^]]*\\]|[^ ]*' '{ for(i=1; i<=NF; i++) print $i }' infile

Регексы фактически совпадают с char-X[not char-X]<zero-or-more-of-any-character-until>char-X.

см. в man awk

FPAT
A regular expression describing the contents of the fields in a record. When set, gawk parses the input into fields, where the fields match the regular expression, instead of using the value of FS as the field separator.

2
18.03.2021, 22:27

Сначала добавьте двойные кавычки вокруг бита даты (1 ). Это дает вам действительный файл CSV с пробелами в качестве разделителей вместо запятых. Затем используйте анализатор CSV, чтобы прочитать строку как запись CSV, используя пробел в качестве разделителя полей (2 ). Выведите запись с разделителем, установленным на новую строку (3 ). Сделанный.

  1. sed 's/\[/"&/; s/\]/&"/'
  2. cvsformat -H -d ' '(-Hне читать строку заголовка с заголовками столбцов)
  3. csvformat -H -D $'\n'(для $'...'требуется оболочка, которая понимает «С-строки», например bash, в противном случае используйте буквальный перевод строки)

2-й и 3-й шаги можно комбинировать, что даст вам

sed 's/\[/"&/; s/\]/&"/' logfile | csvformat -H -d ' ' -D $'\n'

С учетом данных в logfileэто дает

www.example.com:443
1.2.3.4
-
-
[01/Feb/2021:15:07:35 +0100]
GET /index.html HTTP/1.1
200
8317
https://www.example.com/
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36

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

csvformatявляется частью csvkit .

1
18.03.2021, 22:27

Теги

Похожие вопросы