두 날짜 미만인 경우 :
2015-09-12,2015-08-13
그리고 그들 사이의 일수를 가져와야합니다. 아래 코드를 사용합니다.
awk -F'[-,]' '{print 360*($4-$1)+30*($5-$2)+($6-$3)}'
이 코드의 출력은 -29
실제로 차이는 있지만29
답변
다음 awk
과 같은 기능을 정의 할 수 있습니다 .
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
답변
이러한 상황에 대한 일반적인 트릭은 제곱근을 사용하는 것입니다.
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
답변
또 다른 방법:
awk -F'[-,]' '{d=360*($4-$1)+30*($5-$2)+($6-$3);print (d>0)?d:-d}'
답변
GNU를 사용한다고 가정하면 awk
펑키 mktime
기능이 유용합니다.
awk -F, '{ gsub(/-/," ",$0);a=(mktime($2 " 23 59 59")-mktime($1 " 00 00 00"))/86400;print a*(a<0?-1:1)}' file.txt
29
답변
늦었지만, 여기에 date
게시 된 모든 답변이 그것을 고려한 steve의 답변으로 매달 고정 된 30 일을 기반으로하는 GNU 명령을 사용하는 솔루션 이 있습니다.
awk -F, '{cmd="printf \"%d\n\" $((($(date -d"$1" +%s)-$(date -d"$2" +%s))/86400))";
cmd|getline $0; $0*=($0<0?-1:1); close(cmd)}1' infile
아래 입력의 경우 :
2015-09-12,2015-08-13
2017-02-12,2017-03-12
출력은 다음과 같습니다.
30
28