awk를 사용하여 두 파일의 두 날짜 사이의 차이를 인쇄하는 방법

awk를 사용하여 두 파일의 두 날짜 사이의 차이를 인쇄하는 방법

각 고유 ID($1)에 대해 파일 1의 가장 빠른 날짜($2)와 파일 2의 날짜($2) 사이의 일수 차이를 인쇄해야 합니다. 이렇게 하면 ID($1)와 날짜 차이를 출력 파일로 얻을 수 있습니다.

파일 1

102 2008-06-12 11:08:12 23
105 2005-05-16 20:15:05 15
102 2009-01-30 13:16:45 38
105 2006-06-14 15:30:25 45
102 2009-04-13 24:25:30 45
105 2006-07-23 13:23:30 12
108 2004-05-21 12:25:15 15
108 2005-04-29 06:15:13 23

파일 2

102 20060305 13
105 20040530 12
108 20021225 21

원하는 출력

102 827 
105 351
108 511

답변1

당신이 가지고 있는지 여부GNU awkmktime기능성

awk '
    FNR == NR{
        d = mktime(gensub("[-:]", " ", "g", $2 FS $3))
        if(D[$1] > d || ! D[$1])
            D[$1] = d
        next
    }
    {
        d = substr($2, 1, 4) FS substr($2, 5, 2) FS substr($2, 7) " 0 0 0"
        printf "%i %i\n", $1, (D[$1] - mktime(d)) / 86400
    }
    ' file1 file2

생산할 것이다

102 830
105 351
108 513

답변2

아마도 이것이 도움이 될 것입니다

#!/bin/bash
#changing to stamp
stamp1=$(date -d '2008-12-12 11:08:12' +"%s")
stamp2=$(date -d '20081210' +"%s")
#st2date1=$(date --date="@$stamp1" "+%Y-%m-%d %H:%M:%S")
#st2date2=$(date --date="@$stamp2" "+%Y-%m-%d %H:%M:%S")
#echo "$st2date1 -- $st2date2"
day='86400'
if [[ "$stamp1" -gt "$stamp2" ]]; then
  dif1=$(($stamp1-$stamp2))
  dif=$(( $dif1 / $day ))
  echo "Diffrent = $dif days"
else
  dif1=$(($stamp2-$stamp1))
  dif=$(( $dif1 / $day ))
  echo "Diffrent = $dif days"
fi

관련 정보