如果有可能以不是一行格式显示这个,而是bash脚本。它更容易理解,并希望了解如何使用数组和记录字段进行操作。没有Perl,Python等等。
我有日志文件out.log
:
03:01:29.317 info process 1 PC1
05:22:42.211 info process 3 PC2
05:22:42.302 info process 3 acknowledge
06:09:32.083 info process 2 PC5
05:12:32.759 ERROR process 1 acknowledge
07:21:45.112 info process 22 PC16
08:12:32.300 info process 19 PC1
09:25:41.000 info process 19 acknowledge
06:09:35.083 info process 2 acknowledge
03:01:25.714 info process 14 PC1
05:12:32.308 info process 14 acknowledge
05:12:32.309 ERROR process 22 acknowledge
05:12:32.300 info process 7 PC1
07:25:41.000 info process 7 acknowledge
我想找到关于PC1的所有条目,关于PC1的每条记录都有确认记录并且确认我们可以通过进程号字段找到它,它对于PC1和确认是相同的。顺便说一下对于相同的PC1进程号是不同的。 一步一步:
如何操作结果字段,例如比较时间?预期结果:
03:01:29.317 info process 1 PC1
05:12:32.759 ERROR process 1 acknowledge
这是我的所有尝试和结果,对不起长文
CASE1
a=($(awk '$5 == "PC1" { print}' out.log))
echo ${a[@]:0}
03:01:29.317 info process 1 PC1 08:12:32.300 info process 19 PC1 03:01:25.714 info process 14 PC1 05:12:32.300 info process 7 PC1
如果我使用echo $ {a [index]我会打印出所有找到PC1的记录。但看起来它们不是数组而是字符串,因为echo $ {a [0]是第一个字段03:01:29.317 echo $ {a [4]是PC1,而echo $ {a [5] 08:12:32.300与下一条记录相关联的
当我尝试完成循环时
a=($(awk '$5 == "PC1" { print $4}' out.log))
for i in "${a[@]}"
do
awk -v search="$i" '$0 ~ search { print}' out.log
完成 它输出所有文件而不进行任何搜索
案例2
awk '$5=="PC1" { h[$4]; print; next } $4 in h { print; delete h[$4] }' out.log
03:01:29.317 info process 1 PC1
05:12:32.759 ERROR process 1 acknowledge
08:12:32.300 info process 19 PC1
09:25:41.000 info process 19 acknowledge
03:01:25.714 info process 14 PC1
05:12:32.308 info process 14 acknowledge
05:12:32.300 info process 7 PC1
07:25:41.000 info process 7 acknowledge
它还不错,但知道我不知道如何处理它。我想方式应该是一样的,但我不知道如何实现它。这样的事情 awk' $ 5 ==" PC1" {h [$ 4];打印;下一个} $ 4 in h {print;删除h [$ 4]}' out.log | awk' $ 2 ==" ERROR" {h [$ 4];打印;下一个} $ 4 in h {print;删除h [$ 4]}' out.log 给出
05:12:32.759 ERROR process 1 acknowledge
05:12:32.309 ERROR process 22 acknowledge
所有错误消息但没有相关的流程消息
案例3由schorsch312
grep -w "PC1" out.log | awk '{print $4}' | xargs -i grep -w "process {}" out.log
输出是:
03:01:29.317 info process 1 PC1
05:12:32.759 ERROR process 1 acknowledge
08:12:32.300 info process 19 PC1
09:25:41.000 info process 19 acknowledge
03:01:25.714 info process 14 PC1
05:12:32.308 info process 14 acknowledge
05:12:32.300 info process 7 PC1
07:25:41.000 info process 7 acknowledge
它也很棒。 和扩展字符串
grep -w "PC1" out.log | awk '{print $4}' | xargs -i grep -w "process {}" out.log |grep -w "ERROR"| awk '{print $4}' |xargs -i grep -w "process {}" out.log
根据需要提供结果
03:01:29.317 info process 1 PC1
05:12:32.759 ERROR process 1 acknowledge
但我不喜欢它看起来如何
我仍然没有任何简单的bash脚本,但我相信它很简单:(
答案 0 :(得分:0)
我会做以下
grep -w "PC1" st1 | awk '{print $4}' | xargs -i grep -w "process {}" st1
1。)你在PC1之后哭了 2.)从那个grep你得到使用awk的进程号 3.)你在这个流程编号之后grep,xargs将流程编号放在正确的位置
您可以以相同的方式处理错误案例。