ファイルパスとタイムスタンプを持つファイルが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
プロセス置換と文字列(後で使用される)と同じか、またはあると仮定します。bash
zsh
$'...'
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