두 로그 파일의 타임스탬프를 비교하고 최종 시간을 분 단위로 보고합니다.

두 로그 파일의 타임스탬프를 비교하고 최종 시간을 분 단위로 보고합니다.

파일 경로와 타임스탬프가 있는 파일이 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프로세스 대체 및 문자열(나중에 사용됨)과 같거나 가지고 있다고 가정합니다.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

두 번째 파일의 경우:

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

관련 정보