如何编写显示文件中500-511 HTTP服务器错误范围的Bash脚本/命令



我正在尝试编写一个bash脚本,该脚本将列出并统计该文件中HTTP:500-511 web错误的数量"ccc2022-02-19.txt";在每个文件中都有500个错误,范围从HTTP500501502503到511。

在这些文件所在的目录中,每天都会列出4种不同类型的文件,但我只对以"开头的文件感兴趣;ccc";因为它们每天都被列出,例如";ccc2022-02-19.txt"ccc2022-02-20.txt";etc

下面是文件内容";ccc2022-02-19.txt";

10.32.10.181    ignore  19 Feb 2022 00:26:04 GMT        10.32.10.44     GET / HTTP/1.1  500     73      N       0       h
10.32.26.124    ignore  19 Feb 2022 00:26:06 GMT        10.32.10.44     GET / HTTP/1.1  501     73      N       0       h
10.32.42.249    ignore  19 Feb 2022 00:26:27 GMT        10.32.10.44     GET / HTTP/1.1  500     73      N       1       h
10.32.10.181    ignore  19 Feb 2022 00:26:34 GMT        10.32.10.44     GET / HTTP/1.1  302     73      N       0       h
10.32.26.124    ignore  19 Feb 2022 00:26:36 GMT        10.32.10.44     GET / HTTP/1.1  503     73      N       1       h
10.32.26.124    ignore  19 Feb 2022 00:26:36 GMT        10.32.10.44     GET / HTTP/1.1  502     73      N       1       h
10.32.26.124    ignore  19 Feb 2022 00:26:36 GMT        10.32.10.44     GET / HTTP/1.1  502     73      N       1       h
10.32.26.124    ignore  19 Feb 2022 00:26:36 GMT        10.32.10.44     GET / HTTP/1.1  504     73      N       1       h
10.32.26.124    ignore  19 Feb 2022 00:26:36 GMT        10.32.10.44     GET / HTTP/1.1  511     73      N       1       h
10.32.26.124    ignore  19 Feb 2022 00:26:36 GMT        10.32.10.44     GET / HTTP/1.1  508     73  

我试过使用这个命令

awk '{for(i=1;i<=NF;i++){if($i>=500 && $i<=511){print $i}}}' ccc2022-02-19.txt

它列出了数字500-511,但恐怕它不仅给出了HTTP响应,还提供了其他数字,如文件中的50023、503893。

具体地说,我只想看到HTTP错误。请注意,上面的文件内容只是一个例子。。。。。。

这里有一个简单的awk脚本:

awk '$12 ~ /5[[:digit:]]{2}/ && $12 < 512 {print $12}' input.txt

解释

$12 ~ /5[[:digit:]]{2}/字段#12匹配5[0-9][0-9]

$12 < 512字段#12小于12

$12 ~ /5[[:digit:]]{2}/ && $12 < 512(字段#12匹配5[0-9][0-9](AND(字段#11小于12(

{print $12}仅当满足上述两个条件时才打印字段#12

我认为这个脚本可能有助于

#!/bin/bash
ccc=500
while [ $ccc -le 511 ]
do 
echo $ccc
ccc=$(( $ccc +1 ))
sleep 0.5
done

你可以试试这个:

#!/bin/bash
CURRENTDATE=`date +"%Y-%m-%d"`
echo Today date is=${CURRENTDATE}
echo Looking for today file www${CURRENTDATE}.txt
echo "#####"
echo Start listing 500 response codes for file:ccc${CURRENTDATE}.txt
#awk '{print $3 " " $4 " " $5 " " $6 " " $11}' ccc${CURRENTDATE}.txt | grep 500
echo "I am not listing to reduce amount of lines per Ms-teams limit"
echo Completed listing 500 response codes for file:ccc${CURRENTDATE}.txt
echo "#####"

假设所有行看起来都像示例(即http错误代码总是在第12个空白分隔字段中(:

$ awk '$12>= 500 && $12<=511 {print $12}' ccc2022-02-19.txt
500
501
500
503
502
502
504
511
508

如果这不适用于所有可能的输入行,那么应该使用一组更具代表性的样本数据来更新问题。

这应该可以实现您想要的。请大家在断定他问了一个愚蠢的问题之前,总是试着阅读描述。事实上很清楚!!

awk '{print $3 " " $4 " " $5 " " $6 " " $11 " " $12}' ccc2022-02-21.txt | grep 500 | wc -l

这个实验是参考他上面提供的文件输出完成的,我测试了它,它成功了!在我看来,这是一个绝妙的问题

相关内容

  • 没有找到相关文章

最新更新