Linux bash:如果上一列高于';xxx和x27;
我需要分析apache服务器状态的输出。我需要匹配在“发送回复”解析Statistic页面时具有高延迟的每个条目。内容如下所示:Linux bash:如果上一列高于';xxx和x27;,linux,bash,awk,grep,pattern-matching,Linux,Bash,Awk,Grep,Pattern Matching,我需要分析apache服务器状态的输出。我需要匹配在“发送回复”解析Statistic页面时具有高延迟的每个条目。内容如下所示: 11-1 24986 7/9/7288 K 0.08 3 1 77.5 0.08 23.17 IP-CLIENT hostname:80 GET /static/img/securoty.png HTTP/1.1 12-1 23648 65/108/8176 K 5.74 2 51 90.6 0.16 24.50 IP-CLIENT hostname:80 POST
11-1 24986 7/9/7288 K 0.08 3 1 77.5 0.08 23.17 IP-CLIENT
hostname:80 GET /static/img/securoty.png HTTP/1.1
12-1 23648 65/108/8176 K 5.74 2 51 90.6 0.16 24.50 IP-CLIENT
hostname:80 POST /php/toolbar_ajax.php HTTP/1.1
13-1 22887 95/118/7672 K 5.38 2 47 140.5 0.17 18.65 IP-CLIENT
hostname:80 POST /php/toolbar_ajax.php HTTP/1.1
14-1 24987 4/6/8016 K 0.09 4 379 288.5 0.28 22.42 IP-CLIENT
hostname:80 GET /static/img/bg_dealers.jpg HTTP/1.1
15-1 24518 7/43/8425 K 2.36 4 53 10.2 0.18 23.24 IP-CLIENT
hostname:80 POST /php/toolbar_ajax.php HTTP/1.1
40-3 12970 14/27/5335 W 10.37 0 0 26.7 0.05 18.44 IP-CLIENT
hostname:80 GET /php/r_fin_new3_std.php HTTP/1.1
每行奇数都有这样一个图例:
__________________________________________________________________
Srv Child Server number - generation
PID OS process ID
Acc Number of accesses this connection / this child / this slot
M Mode of operation
CPU CPU usage, number of seconds
SS Seconds since beginning of most recent request
Req Milliseconds required to process most recent request
Conn Kilobytes transferred this connection
Child Megabytes transferred this child
Slot Total megabytes transferred this slot
__________________________________________________________________
每个偶数行都包含客户端请求的URL。
我需要匹配“W”(发送回复)中包含“操作模式”的每一行和“SS”(自最近请求开始后的秒数)中大于10的每一行。在匹配这些行之后,我需要打印出行和后面的行。
在这种情况下,我需要打印:
40-3 12970 14/27/5335 W 10.37 0 0 26.7 0.05 18.44 IP-CLIENT
hostname:80 GET /php/r_fin_new3_std.php HTTP/1.1
- 第4列第一行(操作模式)为“W”=真
- 第一行第5列(自最近一次请求开始后的秒数)为10.37>10=TRUE
grep " W " -A 1 /var/log/server-status.log
有什么想法吗?您可以使用
awk
:
awk 'NF==11 && $4=="W" && $5 > 10 {getline line; printf "%s\n%s\n", $0, line}'
我正在检查字段计数为11的行,第四个字段设置为W,第五列的数值大于10。如果条件为真,我将获得另一行并打印当前行和该行。hek2gml工作正常,让我们为他设置一个+1:) 我会选择一些不同的东西,没有: 返回:
40-3 12970 14/27/5335 W 10.37 0 0 26.7 0.05 18.44 IP-CLIENT
hostname:80 GET /php/r_fin_new3_std.php HTTP/1.1
也就是说,不断检查该行是否符合要求。如果是这样,请将其存储在行
变量中,以便在读取下一行时将其与下一行一起打印
更习惯地说,您可以使用以下建议:
awk 'NF==11 && $4=="W" && $5 > 10 {x=2} x && x--' file
也就是说,在该条件匹配时设置计数器。从那一刻起,继续评估值和值--
是否为真。每当发生这种情况时,awk
将打印当前行。最终它将打印当前行和下一行,因为我们从计数器=2开始
请在中查找更多信息。非常感谢您提供的高效快速的答案,太好了!嗨,谢谢你的信用卡!您的答案将打印上一行,但它应该打印模式下的行。如果没有getline,在匹配后打印行的正常方法是设置一个计数器,即
awk'NF==11&&$4==“W”&&&$5>10{x=2}x&&x--'
@123哦,太好了!如果你不介意的话,也用这个更新一下。
awk 'NF==11 && $4=="W" && $5 > 10 {x=2} x && x--' file