両方のログファイルのタイムスタンプを比較し、最終時間を分単位で報告します。

両方のログファイルのタイムスタンプを比較し、最終時間を分単位で報告します。

ファイルパスとタイムスタンプを持つファイルが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タイムスタンプで、2番目の列がパス名であるタブ区切り形式に変換できます。

GNUとシェルがdateプロセス置換と文字列(後で使用される)と同じか、またはあると仮定します。bashzsh$'...'

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

これにより、GNUはdate元のファイルのスペースで区切られた最初の7列のタイムスタンプを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

2番目のファイルの場合:

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

その後、2番目の列のファイルをソートし、joinそれを使用して同じ2番目の列のファイルを抽出できます。

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

関連情報