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 & Time
End 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