Linux 命令 shell 脚本

Linux command shell script

提问人:user3318024 提问时间:8/4/2023 最后编辑:markp-fusouser3318024 更新时间:8/7/2023 访问量:54

问:

我正在Linux日志文件中搜索,其中包含一些错误代码,我想每小时计算一次这些代码,但我的要求是响应代码应以以下形式显示。在附加文件数据未满足我的要求时,任何人都可以对此提供帮助。我当前的命令

对于示例日志 -:

IP web.com - [01/Aug/2023:01:27:21 +0200] "POST /aa/v1/bbb/session?device_id=urn:uuid:2972033-34a4-4d1c-8ctt-55d31140c09d HTTP/1.1" 503 0 "-" "IOS/2.1.0 (Linux; U; Android 8.1.0; ttw Build/OTT 1.171019.011)"

法典-:

for i in {00..23} ; do  grep "pattern" access.log |grep "03/Aug/2023:$i" |awk -F " " '{print $4,$9}' |awk '{print $NF}'|sort |uniq -c ; done
 91 200
  1 429
 46 200
  1 503
 11 200
  4 200
  7 200
  9 200
 37 200
  1 403

在此输出中,获取响应代码计数,但我想要另外一列,该列在上述数据之前有几个小时。例如

  hrs   Counts  Response code 
 00    91 200
 00    1 429
 01    46 200
 01    1 503
 02   11 200

小时计算相应列中的错误代码[text](这是我当前的输出,但它对我不起作用,我想要上面显示的示例中的数据 )

Linux 文件 awk 命令 echo

评论

2赞 Fravadona 8/4/2023
欢迎来到 SO。发布代码图像无济于事;此外,您要处理的输入和预期的结果尚不清楚。
2赞 Ed Morton 8/4/2023
请为您的问题提出一个比“Linux 命令 shell 脚本”更有意义的主题,以便将来有类似问题的人可以找到它。
1赞 glenn jackman 8/4/2023
请阅读如何提出一个好问题?和其他“提问”主题
0赞 user3318024 8/4/2023
您能否再次检查我的 cli 命令以从原始日志文件中提取数据。记录原始文件示例。IP web.com - [01/Aug/2023:01:27:21 +0200] “POST /aa/v1/bbb/session?device_id=urn:uuid:2972033-34a4-4d1c-8ctt-55d31140c09d HTTP/1.1” 503 0 “-” “IOS/2.1.0 (Linux;U;安卓 8.1.0;ttw Build/OTT 1.171019.011)”

答:

1赞 ufopilot 8/5/2023 #1
awk -v pattern="some pattern" -v day='01/Aug/2023' '
    $0 ~ pattern && $4 ~ day {
        split($4,a,":")
        codes[a[2]" "$9]++
    }
    END{
        for (i in codes){
            split(i,b)
            print b[1], codes[i], b[2]
        }
    }
' access.log

01 4 503
02 1 200
02 1 404
02 2 503
03 1 200

评论

0赞 user3318024 8/7/2023
这段代码可以工作,但不是以预期的方式,你只是grep时间并只拿起响应代码,但我需要另一个模式“grep”模式“访问.log,请检查我上面的命令。希望你能理解我的期望。
0赞 ufopilot 8/7/2023
@user3318024:好的,我没看到。查看我的更新grep "pattern" access.log