파일 경로와 타임스탬프가 있는 파일이 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 및 쉘이 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
두 번째 파일의 경우:
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