awk 명령을 사용하여 동일한 파일에 있는 두 열 간의 날짜 차이를 계산하는 방법은 무엇입니까?

awk 명령을 사용하여 동일한 파일에 있는 두 열 간의 날짜 차이를 계산하는 방법은 무엇입니까?

날짜가 다른 두 개의 열(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으로 순진하게 나누면 소수 일수가 제공됩니다).

바라보다Gawk: 효율적인 AWK 프로그래밍,9.1.5 시간 기능

관련 정보