grep统计方法平均耗时及TP99

觉得文章写得好,请不吝点赞、收藏

平均耗时、TP99含义点我查看

合并处理多个指令

在Linux中,可以使用grep命令配合管道和wc命令来统计多个不同的模式(pattern)。以下是一个示例,假设你想统计文件file.txt中包含"pattern1"和"pattern2"的次数:

grep -c 'pattern1' file.txt && grep -c 'pattern2' file.txt

这个命令会输出"pattern1"和"pattern2"各自出现的次数。

如果你想一行命令中统计多个模式并列出每个模式出现的次数,可以使用如下命令:

(grep -c 'pattern1' file.txt; grep -c 'pattern2' file.txt) | paste -s -d, -

这个命令会输出一行,包含"pattern1"和"pattern2"各自出现的次数,并用逗号分隔。

如果文件很大,你可能想要使用grep的-P选项来使用Perl正则表达式,这样可以在一个命令中匹配多个模式:

grep -P '(?=pattern1)(?=pattern2)' file.txt | wc -l

这个命令使用了正则表达式的前瞻断言(lookahead assertions)来匹配"pattern1"和"pattern2",然后统计匹配的次数。注意,由于前瞻断言不消耗字符,所以这种方法会导致统计结果比实际多。因此,这种方法适用于简单模式匹配,但不适合复杂情况。

统计日志中接口耗时情况

# 统计xxx.log日志中 method cost = 输出的从1ms-1000ms耗时情况
grep -E "method cost = ([0-9]+)" xxxx.log | awk '
{
    match($0, /method cost = ([0-9]+)/, arr)
    count[arr[1]]++
}
END {
    for (i = 1; i <= 1000; i++) {
        if (count[i] > 0) {
            print "method cost = " i ": " count[i]
        }
    }
}
'

让我们详细分析一下这段 awk 命令的执行过程:

  1. match($0, /method cost = ([0-9]+)/, arr):

    • match 函数用于在当前行 $0 中查找与正则表达式 /method cost = ([0-9]+)/ 匹配的部分。
    • 正则表达式 /method cost = ([0-9]+)/ 匹配形如 method cost = 数字 的字符串,其中 ([0-9]+) 匹配一个或多个数字。
    • 如果匹配成功,匹配的结果将存储在数组 arr 中,其中arr[0] 包含整个匹配的字符串, arr[1] 将包含匹配的数字部分。
  2. count[arr[1]]++:

    • count 是一个关联数组,用于统计每个 method cost 值出现的次数。
    • arr[1] 包含了从 match 函数中提取的数字部分。
    • count[arr[1]]++ 表示将 arr[1] 对应的计数值加1。
执行过程示例

假设日志文件中的一行是:

method cost = 25
  • match($0, /method cost = ([0-9]+)/, arr):

    • $0 是当前行,即 method cost = 25
    • 正则表达式 /method cost = ([0-9]+)/ 匹配 method cost = 25,并将 25 存储在 arr[1] 中。
  • count[arr[1]]++:

    • arr[1]25
    • count[25]++ 表示将 count 数组中键为 25 的值加1。

接上一趴,统计平均耗时

grep -E "method cost = ([0-9]+)" xxxx.log | awk '
{
    match($0, /method cost = ([0-9]+)/, arr)
    if (arr[1] >= 1 && arr[1] <= 1000) {
        count[arr[1]]++
        total_time += arr[1]
        total_count++
    }
}
END {
    #打印耗时详情
    #for (i = 1; i <= 1000; i++) {
    #    if (count[i] > 0) {
    #        print "method cost = " i ": " count[i]
    #    }
    # }
    if (total_count > 0) {
        average_time = total_time / total_count
        print "Average Time: " average_time
    } else {
        print "No data in the range 1 to 1000"
    }
}
'

接上一趴,统计平均耗时和TP99

# 要统计 TP99(99th Percentile Time),我们需要对数据进行排序并找到第99百分位的值,其他分位值同理
grep -E "getFeature cost = ([0-9]+)" search-rerank-server.log.2024-08-12-22 | awk '
{
    match($0, /getFeature cost = ([0-9]+)/, arr)
    if (arr[1] >= 1 && arr[1] <= 1000) {
        count[arr[1]]++
        total_time += arr[1]
        total_count++
        values[total_count] = arr[1]
    }
}
END {
    if (total_count > 0) {
        # 计算平均耗时
        average_time = total_time / total_count
        print "Average Time: " average_time

        # 计算TP99
        asort(values)
        tp99_index = int(total_count * 0.99)
        tp99_time = values[tp99_index]
        print "TP99 Time: " tp99_time
    } else {
        print "No data in the range 1 to 1000"
    }
}
'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值