Удаление разрывов строк из файлов журнала

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

входной файл:

02/01/2018 08:18:14      ANR0407I Session 63121 started for administrator 
                         ADMIN_CENTER (DSMAPI) (Tcp/Ip SAP-DOC(52499)).SESSION: 
                         63121)

Вывод должен быть:

02/01/2018 08:18:14      ANR0407I Session 63121 started for administrator ADMIN_CENTER (DSMAPI) (Tcp/Ip SAP-DOC(52499(SESSION: 63121)
1
задан 30 June 2018 в 03:08

1 ответ

Вы можете использовать sed, чтобы соединить строки с предыдущей, если они начинаются с последовательности пустых символов (пробел или горизонтальная табуляция):

sed -e :a -e '$!N;s/\n[[:blank:]]\{1,\}/ /;ta' -e 'P;D' file.log

Это небольшая вариация примера [ 1110] 40. Добавьте строку к предыдущему, если она начинается со знака равенства "=" из Объясненных однострочников Sed, Часть I: Интервал между файлами, нумерация и преобразование и замена текста


Если «блоки» разделены одной или несколькими пустыми строками (в журнале недостаточно информации, чтобы узнать, так ли это), то более простой альтернативой было бы использование awk в абзаце mode :

awk -vRS= '{$1=$1} 1' file.log

, который читает целые абзацы и затем переформатирует их с разделителем вывода по умолчанию (один пробел).

1
ответ дан 30 June 2018 в 03:08

Другие вопросы по тегам:

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