【发布时间】:2015-09-20 04:03:05
【问题描述】:
我有一个日志文件,其中包含我需要抓取的一些行:
Jul 2 06:42:00 myhostname error proc[12345]: 01310001:3: event code xxxx Slow transactions attack detected - account id: (20), number of dropped slow transactions: (3)
Jul 2 06:51:00 myhostname error proc[12345]: 01310001:3: event code xxxx Slow transactions attack detected - account id: (20), number of dropped slow transactions: (2)
Account id(xx) 为我提供了可以通过 mysql 查询收集的对象的名称。
以下命令(肯定根本没有优化,但可以工作)为我提供了每个帐户 ID 的匹配行数:
grep "Slow transactions" logfile| awk '{print $18}' | awk -F '[^0-9]+' '{OFS=" ";for(i=1; i<=NF; i++) if ($i != "") print($i)}' | sort | uniq -c
14 20
输出 (14 20) 表示帐户 id 20 被观察了 14 次(日志文件中的 14 行)。
然后我也有一些下降的慢交易:(2)部分。 这给出了记录的已删除事务的实际数量。换句话说,一个日志条目可能意味着 1 个或多个被丢弃的事务。
我确实有一个小命令来计算丢弃的事务数:
grep "Slow transactions" logfile | awk '{print $24}' | sed 's/(//g' | sed 's/)//g' | awk '{s+=$1} END {print s}'
73
这意味着 73 笔交易被丢弃。
这两个工作,但是当我要合并两者时,我被卡住了。我真的不知道如何将它们结合起来;我很确定 awk 可以做到(并且可能是我做到的更好的方法),但如果社区中的任何专家能给我一些指导,我将不胜感激。
更新 由于上述功能对于我们的一些 awk 专家来说太容易了,所以我介绍了一个可选功能:)
如前所述,我可以将帐户 ID 转换为发出 mysql 查询的名称。因此,现在的想法是将 ID => 名称转换包含到 awk 命令中。
mySQL 查询如下所示(XX 是帐户 ID):
mysql -Bs -u root -p$(perl -MF5::GenUtils -e "print get_mysql_password.qq{\n}") -e "SELECT name FROM myTABLE where account_id= 'XX'"
我创建了下面的帖子,该帖子处理命令输出到 awk 但面临语法错误...
【问题讨论】: