比较两个日志文件的时间戳并报告最终时间(以分钟为单位)

比较两个日志文件的时间戳并报告最终时间(以分钟为单位)

我有 2 个带有文件路径和时间戳的文件。我试图将 file1: "192.168.1.4_time-final2" 与 file2: "192.168.1.1_file-stat" 的内容进行比较,并在成功的文件路径匹配后减去相应的时间戳并在几分钟内得到结果。

cat 192.168.1.1_file-stat

Mon 19 Jul 2021 03:52:09 PM IST /etc/nginx/nginx.conf
Mon 19 Jul 2021 03:52:09 PM IST /home/fes/nginxproxy.conf
Wed 03 Mar 2021 03:33:54 PM IST /home/fes/nginx/createfile
Mon 19 Jul 2021 08:52:15 PM IST /home/fes/nginx/Templates
Wed 03 Mar 2021 03:33:54 PM IST /home/fes/nginx/Templates/testPortalSAML.default
Mon 19 Jul 2021 07:28:05 PM IST /home/fes/nginx/Templates/Default.default
Wed 03 Mar 2021 03:33:54 PM IST /home/fes/nginx/Templates/testPortal.default
Mon 19 Jul 2021 08:52:15 PM IST /home/fes/nginx/Templates/BT.default

cat 192.168.1.4_time-final2

Thu 22 Jul 2021 12:46:39 PM IST /home/fes/nginx/createfile
Thu 22 Jul 2021 12:47:24 PM IST /home/fes/nginx/Templates/testPortal.default

答案1

您可以将文件从现有格式转换为制表符分隔形式,其中第一列是 Unix 时间戳,第二列是路径名。

假设 GNU和类似或的dateshell具有进程替换和字符串(稍后使用):bashzsh$'...'

paste <( date -f <( cut -d ' ' -f -7 file ) +%s ) \
      <( cut -d ' ' -f 8- file )

这使得 GNU 将date原始文件的前七个空格分隔列中的时间戳转换为 Unix 时间戳。然后它将它们与路径名粘贴在一起。

第一个文件的输出:

1626690129      /etc/nginx/nginx.conf
1626690129      /home/fes/nginxproxy.conf
1614765834      /home/fes/nginx/createfile
1626708135      /home/fes/nginx/Templates
1614765834      /home/fes/nginx/Templates/testPortalSAML.default
1626703085      /home/fes/nginx/Templates/Default.default
1614765834      /home/fes/nginx/Templates/testPortal.default
1626708135      /home/fes/nginx/Templates/BT.default

对于第二个文件:

1626938199      /home/fes/nginx/createfile
1626938244      /home/fes/nginx/Templates/testPortal.default

然后,我们可以对第二列上的文件进行排序,并使用join它来提取具有相同第二列的文件:

join -t $'\t' -1 2 -2 2 \
        <( paste <( date -f <( cut -d ' ' -f -7 file1 ) +%s ) \
                <( cut -d ' ' -f 8- file1 ) | sort -k 2,2 ) \
        <( paste <( date -f <( cut -d ' ' -f -7 file2 ) +%s ) \
                <( cut -d ' ' -f 8- file2 ) | sort -k 2,2 )

给出示例输入文件的输出:

/home/fes/nginx/Templates/testPortal.default    1614765834      1626938244
/home/fes/nginx/createfile      1614765834      1626938199

然后可以通过一个简单的awk程序来计算时间差(以分钟为单位):

join -t $'\t' -1 2 -2 2 \
        <( paste <( date -f <( cut -d ' ' -f -7 file1 ) +%s ) \
                <( cut -d ' ' -f 8- file1 ) | sort -k 2,2 ) \
        <( paste <( date -f <( cut -d ' ' -f -7 file2 ) +%s ) \
                <( cut -d ' ' -f 8- file2 ) | sort -k 2,2 ) |
awk -F '\t' '{ print ($NF - $(NF-1))/60, $1 }'

最终输出:

202874 /home/fes/nginx/Templates/testPortal.default
202873 /home/fes/nginx/createfile

相关内容