
날짜가 다른 두 개의 열(mm/dd/yyyy)이 있는 쉼표로 구분된 다중 열 csv 파일이 있습니다. 이 두 날짜의 차이점을 확인하겠습니다. 다음은 그 예입니다:
echo filename
001xxxc,28.2,03/04/2009,11/19/2009
00cvbfd,34.4,03/04/2009,01/06/2010
04rsdsd,34,12/01/2006,10/02/2001
456dfds,40,12/01/2006,04/23/2002
et556ss,40.8,12/01/2006,10/22/2002
어쨌든 awk 명령을 사용하여 날짜 차이를 얻을 수 있는지 궁금합니다.
이 awk 명령을 시도했지만 올바른 방법이 아닌 것 같나요?
awk -F, '{print $1","$2","$3-$4}' filename
답변1
날짜 차이를 원한다고 가정하고 GNU awk( )가 있으면 gawk
다음과 같이 할 수 있습니다.
gawk -F, '
{
split($3,a,"/");
split($4,b,"/");
t1 = mktime(sprintf("%d %d %d 0 0 0 0",a[3],a[1],a[2]));
t2 = mktime(sprintf("%d %d %d 0 0 0 0",b[3],b[1],b[2]));
print (t2-t1)/86400
}
' filename
260
308
-1886
-1683
-1501
인수 mktime
는 형식의 문자열이어야 합니다 "YYYY MM DD HH MM SS [DST]"
. 선택적 DST
플래그를 0으로 설정하면 일광 절약 시간제를 무시하도록 지정됩니다(그렇지 않으면 86400으로 순진하게 나누면 소수 일수가 됩니다).