두 파일 데이터 간의 날짜/시간 차이 계산

두 파일 데이터 간의 날짜/시간 차이 계산

File1과 File2라는 두 개의 파일이 있습니다. File1의 데이터는 다음과 같습니다.

"Start Date & Time" = 1804030000

그리고 File2의 데이터는 다음과 같습니다

"End Date & Time" = 1804030400

두 파일 모두 동일한 수의 라인(거의 300,000개 라인)을 갖습니다. 이제 (종료 날짜 및 시간(파일 2) - 시작 날짜 및 시간(파일 1))을 빼서 시차를 계산하고 결과를 한 줄씩 새 파일에 저장하려고 합니다.

두 파일의 날짜 및 시간 형식은 (yymmddhhmm)입니다.

답변1

작은 실행 파일: busybox-D 옵션을 사용하여 날짜 형식을 구문 분석할 수 있습니다.
파일 날짜의 형식은 다음과 같습니다.%y%m%d%H%M

$ busybox date -uD %y%m%d%H%M -d "1804040400"
Wed Apr  4 04:00:00 UTC 2018

awk에서 이것을 사용하십시오 :

$ awk 'BEGIN{  a="busybox date -uD %y%m%d%H%M +%s -d " }
         { b=a $6  ; b | getline sd ; close(b)
           b=a $NF ; b | getline ed ; close(b)
           print(ed,sd,ed-sd)
         }' < <(paste infile[12])

1522814400 1522713600 100800

참고: 이 -u옵션을 사용하면 일부 DST 및 국지적 영향을 피할 수 있습니다. 대부분의 경우 두 날짜 명령이 동일한 환경 TZ에서 실행되므로 최종 차이는 변경되지 않습니다.

답변2

나는 and를 사용 awk하고 먼저 유효한 것으로 변환합니다.Start Date & TimeEnd Date & Time날짜date명령은 이 형식을 이해 yymmdd HH:mm하고 각각을 다음으로 변환합니다.연대차이를 계산하는 시간두번째.

$ awk '{endDateInEpoch="date -d""\""substr($NF,1,6)" "substr($NF,7,2)":"substr($NF,9,2)"\""" +%s";
        endDateInEpoch |getline endDateInEpoch;close(endDateInEpoch); 

        startDateInEpoch="date -d""\""substr($6,1,6)" "substr($6,7,2)":"substr($6,9,2)"\""" +%s";
        startDateInEpoch |getline startDateInEpoch;close(startDateInEpoch);

        sec=endDateInEpoch-startDateInEpoch; sec*=(sec)?1:-1; print sec" seconds"
}' <(paste file[12])
100800 seconds

먼저 paste file[12]두 가지를 모두 붙여넣었습니다.파일 1그리고파일 2결과는 나란히 다음과 같으며 awk입력 으로 전달되어 다음 과 같은 $NF마지막 필드를 가리킵니다.1804040400종료 날짜 및 시간필드 #6 1804030000시작 날짜 및 시간awk기본값 인 공백을 필드 구분 기호로 사용합니다.FS 에프생산하다에스반복자:

"Start Date & Time" = 1804030000        "End Date & Time" = 1804040400

관련 정보