Объединить 2 строки с различными заполненными полями - PullRequest
0 голосов
/ 16 апреля 2020

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

Apr 15 15:51:41 server l2tps: [l2tp_l-22] RADIUS: Accounting user 'USER' (Type: 1)

Apr 15 15:51:35 server l2tps: [l2tp_l-22] RADIUS: Accounting user 'USER' (Type: 2)

И в CSV, над которым я работаю, мне понадобится что-то вроде этого:

    User |  Date  | Conected on | Disconected On | Connection Time
User     | 15-Apr |   15:51:35   |     15:51:41    |    00:00:06

Я уже дошел до того, что у меня есть 2 строки с заполненным временем Conection или Disconection, с вкладками, разделяющими поля. Я уже отсортировал строки по времени, поэтому в длинном списке у меня есть порядок Conection> Disconection> Conection> Disconection ... и т. Д.

Я не знаю, как объединить 2 последовательных строки не перезаписывают заполненные поля. По сути, у меня есть две строки, подобные этой:

USER [TAB] 15-Apr [TAB] 15:51:35 [TAB] [TAB]

USER [TAB] 15-Apr [TAB] [TAB] 15:51:41 [TAB]

И мне нужно превратить это в:

USER [TAB] 15-Apr [TAB] 15:51:35 [TAB] 15:51:41 [TAB]

И я не могу до конца понять это.

TLDR: у меня есть 2 строки с данными, разделенными полями, и мне нужно объединить обе строки в одну, где есть пустые поля. Как мне это сделать?

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 16 апреля 2020
awk '
    BEGIN{FS=OFS="\011"}  #Sets field separators to tab
    j{x=$4;$0=j;$4=x;j=0} #If j!=0, set line=j (the line before) and put the 4th field of this line in it
    $4~/^[ ]*$/{j=$0}     #If 4th field is empty, j=thisline
    !j                    #If j=0, print the line
' input

Даже с комментариями, приведенный выше фрагмент может быть трудно найти asp, если вы никогда не пробовали awk раньше. Не стесняйтесь просить разъяснений.


В этом входном файле:

$ cat -T input
USER ^I 15-Apr ^I 15:51:35 ^I ^I
USER ^I 15-Apr ^I ^I 15:51:41 ^I

Полученный результат составляет

$ cat -T <(./script)
USER ^I 15-Apr ^I 15:51:35 ^I 15:51:41 ^I
...