从日志文件中提取服务名称和timstamp

时间:2019-01-31 08:45:51

标签: shell

运行grep命令后,我得到了一个日志文件输出。 例如:

  

2019-01-30 08:58:05.386 -0800 INFO [16168]-程序已结束:   xxx :: xxxxxx :: xxxxxxxx :: xxxxxxxxxxxxxxxx xxx xxxxxx   [Test1.Demo.v1.0_Final] [xxxxxxx] pid 16168用户dexter在00:06:29之后

因此,我需要一个shell / perl / python脚本,该脚本可以获取[]内部的Text,即Test1.Demo.v1.0_Final并打印时间戳,即00:06:29(这是它花费的时间运行)

任何帮助将不胜感激!

谢谢

因此,此输出应发送到txt或csv文件,说明 服务名称|时间戳记 Test1.Demo.V1.0 00:06:29

1 个答案:

答案 0 :(得分:0)

当然有更好,更优雅的解决方案,但这可以做到:

var1=$(cat log.file | cut -d'[' -f3- | cut -d']' -f1)
var2=$(cat log.file | grep -o -P 'after.{0,9}'| cut -d' ' -f2)
result="$var1 $var2"
echo $result

Test1.Demo.v1.0_Final 00:06:29

var1获得第一部分“ Test1.Demo ...”  并且var2获取时间戳。最后,result是串联的var1var2

要搜索多个文件,您可以将其包装在一些循环中,例如:

result=""
for f in $(find /path/to/your/logs -name 'Logfile*'); do
   while read line; do
     if echo "$line" | grep -q 'Program Ended'; then
        var1=$(cat "$line" | cut -d'[' -f3- | cut -d']' -f1)
        var2=$(cat "$line" | grep -o -P 'after.{0,9}'| cut -d' ' -f2)
        result+="$var1 $var2\n"
     fi
   done < $f
done
echo -e "$result"

我还没有测试过,但是我相信这应该没问题,并告诉您如何进行操作