Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash:如果上一列高于';xxx和x27;_Linux_Bash_Awk_Grep_Pattern Matching - Fatal编程技术网

Linux bash:如果上一列高于';xxx和x27;

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

我需要分析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 /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
然后打印第一行和下一行,这会给我询问的URL

我在日志文件中每隔5分钟保存(追加)一次服务器状态。 如果使用此命令,我将获得所有“发送回复”和后面的行,但不能按大于10的行进行过滤:

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