gpt4 book ai didi

linux - 如果接下来的 X 行不包含特定字符串,则使用 grep

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:35 25 4
gpt4 key购买 nike

我创建了一个 cron 作业,每隔几分钟运行一次,并对日志文件执行“grep”以查找警告。
我想忽略从相关警告开头的 6 行后包含特定字符串的警告。
挑战在于每个警告都由几行而不是一长行组成。
有什么推荐的方法吗?

例如日志:

2018-04-04 05:15:13,576 [housekeeper] DEBUG not-relevant...
2018-04-04 05:16:19,226 [housekeeper] DEBUG not-relevant...
2018-04-04 05:45:28,383 [housekeeper] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@2f350071, stack trace follows
java.lang.Exception: Apparent connection leak detected
at com.sql.HikariConnectionPool.getConnection(java:)
at com.DBConnection.getConn(java:)
at com.DBConnection.getConn(java:)
at com.EAgent.checkER(aaa.java:)
at com.EAgent$EExecuter.run(aaa.java:)
2018-04-04 05:55:54,425 [housekeeper] DEBUG not-relevant...
2018-04-04 05:58:16,814 [DBPool housekeeper] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@45df031, stack trace follows
java.lang.Exception: Apparent connection leak detected
at com.HikariConnectionPool.getConnection(HikariConnectionPool.java:)
at com.DBConnection.getConn(aaa.java:)
at com.DBConnection.getConn(aaa.java:)
at com.m.checkUC(aaa.java:)
at com.m.run(aaa.java:)
at java.c.ThreadPoolExecutor.runWorker(aaa.java:)
at java.c.ThreadPoolExecutor$Worker.run(aaa.java:)
at java.lang.Thread.run(aaa.java:)

我的 grep:grep -A6 -ne 'Connection leak detection' -ne WARN myfile.log

我想忽略所有包含“EAgent”的警告,这样输出将是:

2018-04-04 05:58:16,814 [DBPool housekeeper] WARN  com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@45df031, stack trace follows
java.lang.Exception: Apparent connection leak detected
at com.HikariConnectionPool.getConnection(HikariConnectionPool.java:)
at com.DBConnection.getConn(aaa.java:)
at com.DBConnection.getConn(aaa.java:)
at com.m.checkUC(aaa.java:)
at com.m.run(aaa.java:)
at java.c.ThreadPoolExecutor.runWorker(aaa.java:)
at java.c.ThreadPoolExecutor$Worker.run(aaa.java:)
at java.lang.Thread.run(aaa.java:)

最佳答案

$ cat tst.awk
/^[0-9]/ { prt() }
{ rec = rec $0 ORS }
END { prt() }
function prt() {
if ( (rec ~ /WARN/) && (rec !~ /EAgent/) ) {
printf "%s", rec
}
rec = ""
}

.

$ awk -f tst.awk file
2018-04-04 05:58:16,814 [DBPool housekeeper] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@45df031, stack trace follows
java.lang.Exception: Apparent connection leak detected
at com.HikariConnectionPool.getConnection(HikariConnectionPool.java:)
at com.DBConnection.getConn(aaa.java:)
at com.DBConnection.getConn(aaa.java:)
at com.m.checkUC(aaa.java:)
at com.m.run(aaa.java:)
at java.c.ThreadPoolExecutor.runWorker(aaa.java:)
at java.c.ThreadPoolExecutor$Worker.run(aaa.java:)
at java.lang.Thread.run(aaa.java:)

如果执行速度有问题,这应该稍微快一些:

/^[0-9]/ {
if (inWarn) {
prt()
}
inWarn = /WARN/
}
inWarn { rec = rec $0 ORS }
END { if (inWarn) prt() }
function prt() {
if ( rec !~ /EAgent/ ) {
printf "%s", rec
}
rec = ""
}

关于linux - 如果接下来的 X 行不包含特定字符串,则使用 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49657736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com