マッチしたラインから前にマッチングラインと1本のラインを印刷

kulfi:

1行に含まれるマッチラインから前にLinuxホストと1本のライン上のファイルにマッチング行を印刷することを楽しみにして。

以下は、ログファイルからわずか内容は次のとおりです。

[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

これは、クリーンなソリューションになりそうだしない、私は前方に、いくつかの専門家の1行を探しています、1つのライナーはAWK、sedは、grepのかさえものpythonで許容されます。

Błotosmętek:

それはで行うことができますawkのみ。

awk ' /Timed|failed/ { print previous, $0; }; {previous = $0;}' /var/log/samba/smbd.log.old

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=6813&siteId=1