我正在尝试编写一个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
这个实验是参考他上面提供的文件输出完成的,我测试了它,它成功了!在我看来,这是一个绝妙的问题