Вывести совпадающую строку и одну строку перед сопоставленной строкой - PullRequest
1 голос
/ 20 февраля 2020

ожидает печати строки соответствия в файле на хосте Linux и на одну строку раньше из строки соответствия, включенной в одну строку.

Ниже приведено только содержимое файла журнала:

[2020/02/18 08:25:21.229198,  1] ../source3/lib/smbldap.c:1206(get_cached_ldap_connect)
  Connection to LDAP server failed for the 1 try!
[2020/02/18 08:25:21.229221,  2] ../source3/passdb/pdb_ldap_util.c:287(smbldap_search_domain_info)
  smbldap_search_domain_info: Problem during LDAPsearch: Timed out

Что я пробовал:

Я пробовал следовать с grep и sed, что как-то работает ..

$ egrep -B 1 "failed|Timed" /var/log/samba/smbd.log.old |tr -d "\n" | sed "s/--/\n/g"


[2020/02/18 08:25:21.229198,  1] ../source3/lib/smbldap.c:1206(get_cached_ldap_connect)  Connection to LDAP server failed for the 1 try!
[2020/02/18 08:25:21.229221,  2] ../source3/passdb/pdb_ldap_util.c:287(smbldap_search_domain_info) smbldap_search_domain_info: Problem during LDAPsearch: Timed out

Это делает не выглядит более чистым решением, я с нетерпением жду некоторых экспертов одной линии, один лайнер приемлем с awk, sed, grep или даже python.

Ответы [ 3 ]

2 голосов
/ 20 февраля 2020

Это можно сделать только с awk:

awk ' /Timed|failed/ { print previous, $0; }; {previous = $0;}' /var/log/samba/smbd.log.old
2 голосов
/ 20 февраля 2020

Это может работать для вас (GNU sed):

sed -n 'N;/\n.*\(failed\|Timed\)/s/\n//p;D' file

Отключить неявную печать. Добавить следующую строку. Если добавленная строка содержит failed или Timed, удалите новую строку и напечатайте результат. Удалите первую строку в пространстве шаблона и повторите.

1 голос
/ 20 февраля 2020

Не могли бы вы попробовать следующее решение tac + awk:

tac Input_file | awk '/failed/{found=1;val=$0;next} found && NF{print $0,val;val=found=""}'

ИЛИ добавить форму решения не с одним вкладышем:

tac Input_file | 
awk '
  /failed/{
    found=1
    val=$0
    next
  }
  found && NF{
    print $0,val
    val=found=""
  }
'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...