gpt4 book ai didi

linux - Bash 时差计算

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:16 24 4
gpt4 key购买 nike

我有一个日志文件,我需要计算两个作业之间的时间差。

在我的日志文件中,我应该计算作业incoming requestcandidate list sent for 之间的时间,在下面的日志中以 2 秒为例;

2019-08-23 00:05:27 42303: incoming request: 1dd5.073f.5d5f0397 (156074 bytes)
2019-08-23 00:05:27 42303: store file: /papillon1/vrf/rq/1dd5.073f.5d5f0397.rq, len: 156074
2019-08-23 00:05:27 42303: registering process 42605 left to finish it's work
2019-08-23 00:05:27 42605: making search request for: 1dd5.073f.5d5f0397
2019-08-23 00:05:27 42605: 1dd5.073f.5d5f0397 is request for search by fingers
2019-08-23 00:05:27 42605: portions: 156
2019-08-23 00:05:27 42605: request pattern version 8
2019-08-23 00:05:27 42605: fingers mask: 1111111111; quality mask: 3011031110
2019-08-23 00:05:27 42605: saving request file: /papillon1/vrf/rqm/1dd5.073f.5d5f0397.rqm~
2019-08-23 00:05:27 42605: renaming request file: /papillon1/vrf/rqm/1dd5.073f.5d5f0397.rqm~ -> /papillon1/vrf/rqm/1dd5.073f.5d5f0397.rqm
2019-08-23 00:05:27 42605: request file saved /papillon1/vrf/rqm/1dd5.073f.5d5f0397.rqm
2019-08-23 00:05:27 42605: request is in queue: 1dd5.073f.5d5f0397
2019-08-23 00:05:27 42605: request 1dd5.073f.5d5f0397 registering time: 663 msec
2019-08-23 00:05:28 42303: waiting for 42605 to be finished
2019-08-23 00:05:28 42303: 42605 finished; waiting time: 0 ms
2019-08-23 00:05:29 43188: candidate list for 1dd5.073f.5d5f0397; 2 records
2019-08-23 00:05:29 43188: candidate list file size: 381
2019-08-23 00:05:29 43188: candidate list sent for: 1dd5.073f.5d5f0397

所以我创建了一个脚本来读取日志文件中的所有 map ,并在该 map 的 2 个作业之间进行计算。上面的日志中1dd5.073f.5d5f0397以一张 map 为例。

还有我的完整脚本;

#!/bin/bash

for i in `grep 'incoming request:' a8.svrf.ear | sed 's/^.*: //' | awk -F'[ ]' '{print $1}'`
do
var0=$i

TIME1=`grep 'incoming request:' a8.svrf.ear | awk -F'[ ]' '{print $2}'`

TIME2=`grep 'candidate list sent for:' a8.svrf.ear | grep $var0 | awk -F'[ ]' '{print $2}'`

SEC1=`date +%s -d ${TIME1}`

SEC2=`date +%s -d ${TIME2}`

DIFFSEC=`expr ${SEC2} - ${SEC1}`

echo Map ${var0} >> /home/st/anil/test.txt

echo Start ${TIME1} >> /home/st/anil/test.txt
echo Finish ${TIME2} >> /home/st/anil/test.txt

echo Took ${DIFFSEC} seconds >> /home/st/anil/test.txt

echo Took `date +%H:%M:%S -ud @${DIFFSEC}` >> /home/st/anil/test.txt

echo =========================================================================


done

在我的代码中,我基本上尝试使用 for 循环获取所有 map ,并且对于每张 map ,我尝试为 2 个作业获取时间并找出时差,但我的输出是意想不到的;

=========================================================================
date: extra operand ‘00:05:27’
Try 'date --help' for more information.
date: option requires an argument -- 'd'
Try 'date --help' for more information.
date: invalid date ‘@-’
=========================================================================

如果你们指出我的错误,我会很高兴。谢谢

最佳答案

改用 gawk:

gawk '
/incoming request:/ {
d[$6]=mktime(gensub(/[-:]/," ","g",$1" "$2))
next
}
/candidate list sent for:/&&($8 in d){
print $8,mktime(gensub(/[-:]/," ","g",$1" "$2))-d[$8]
}' OFS="\t" a8.svrf.ear

此答案基于 chat 中提供的信息由 OP.

关于linux - Bash 时差计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com