【问题标题】:Count checker from log file with bash script使用 bash 脚本从日志文件中计数检查器
【发布时间】:2021-04-20 14:10:57
【问题描述】:

我有输出 logfile.txt 的脚本:

File_name1
Replay requests : 5
Replay responsee : 5
Replay completed : 5
--------------------
File_name2
Replay requests : 3
Replay responsee : 3
Replay completed : 3
--------------------

我需要检查所有 3 行的计数是否相同,如果其中一行不匹配,请将 File_name 移动到“echo”。 我尝试使用 cat logfile.txt 之类的模式文件 grep | grep -f patternfile.ptrn 与 for 循环,但没有结果,找不到如何将第一个计数放入允许我用下一行检查它的参数中,以及如何检查日志文件中何时有多个 files_names。 模式是:

Replay requests : 
Replay responsee : 
Replay completed : 
--------------------

这是一个正确的想法还是我走错了路?

【问题讨论】:

  • 我会提取第一个计数,将其保存到一个变量中,然后 grep 查找所有没有此计数的行,如果有的话,将文件移动到您想要的任何位置。跨度>

标签: bash


【解决方案1】:

我需要检查所有 3 行的计数是否相同,如果其中一行不匹配,请将 File_name 移动到“echo”。

这是一种方法/解决方案。

鉴于您的输入示例。

File_name1
Replay requests : 5
Replay responsee : 5
Replay completed : 5
--------------------
File_name2
Replay requests : 3
Replay responsee : 3
Replay completed : 3
--------------------

脚本。

#!/usr/bin/env bash

while mapfile -tn4 array && ((${#array[*]})); do
  name="${array[0]}"
  contents=("${array[@]:1}")
  contents=("${contents[@]##* }")
  for n in "${contents[@]:1}"; do
    (( contents[0] != n )) && 
    printf '%s\n' "$name" &&
    break
  done
done < <(grep -Ev '^-+$' file.txt)

它不会打印任何内容(文件名),而只会更改一个 count 值(假设 count 是每行的最后一个字符串,它是一个数字)然后它应该打印 文件名

请注意,mapfile 又名 readarray 是 bash4+ 功能。

上面的脚本假定在分隔 文件名的破折号之间有 4 行。

以及如何检查日志文件中何时有多个文件名。

不知道这意味着什么。澄清问题。

【讨论】:

    【解决方案2】:

    这是一个脚本的说明点;我没有很好地理解整个问题,也不知道预期的确切输出。

    #! /bin/bash
    
    declare -A dict
    
    while read -a line ; do
        test "${line[0]}" == "Replay" || continue
        rep="${line[1]}"
        num="${line[3]}"
        if test "${dict[$rep]}" == "" ; then
            dict[$rep]=$num
        elif test "${dict[$rep]}" != "$num" ; then
            echo "Value changed for $rep : ${dict[$rep]} -> $num"
        fi
    done < "logfile.txt"
    

    如果例如输入是

    File_name1
    Replay requests : 5
    Replay responsee : 3
    Replay completed : 7
    --------------------
    File_name2
    Replay requests : 2
    Replay responsee : 3
    Replay completed : 6
    --------------------
    

    输出将是:

    Value changed for requests : 5 -> 2
    Value changed for completed : 7 -> 6
    

    有用吗?

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2023-03-06
      相关资源
      最近更新 更多