awk计算两个日期之间的天数:

时间:2014-08-05 09:39:08

标签: awk

想要计算两个日期之间的天数,对于以下示例,天数为== $ 6- $ 4位置。

INPUT.TXT

Desc1,Desc2,Desc3,DATE_ACTIVE,STATEMENT_DATE,Desc4
abc,def,ghi,21-MAR-08,01-JUL-14,jkl
abc,def,ghi,01-JUL-14,15-JUL-14,jkl
abc,def,ghi,06-NOV-06,08-JUL-14,jkl
abc,def,ghi,18-NOV-03,08-JUL-14,jkl
abc,def,ghi,14-JUN-06,15-JUL-14,jkl

期望的输出:

Desc1,Desc2,Desc3,DATE_ACTIVE,STATEMENT_DATE,Desc4,No_Of_Days
abc,def,ghi,21-MAR-08,01-JUL-14,jkl,2293
abc,def,ghi,01-JUL-14,15-JUL-14,jkl,14
abc,def,ghi,06-NOV-06,08-JUL-14,jkl,2801
abc,def,ghi,18-NOV-03,08-JUL-14,jkl,3885
abc,def,ghi,14-JUN-06,15-JUL-14,jkl,2953

尝试了以下命令和部分...

awk 'BEGIN {FS=OFS=","} {print $0,$6-$4}' Input.txt

awk 'BEGIN {FS=OFS=","} {print $0,$date($6)-$date($4)}' Input.txt

任何建议..

3 个答案:

答案 0 :(得分:2)

一种方法:

 kent$  awk -F, -v q='"' '{
 c="date -d"q$4q" +%s";c|getline d1;close(c); 
 c="date -d"q$5q" +%s";c|getline d2;close(c);
 printf "%s,%d\n", $0,(d2-d1)/3600/24}' file
abc,def,ghi,21-MAR-08,01-JUL-14,jkl,2292
abc,def,ghi,01-JUL-14,15-JUL-14,jkl,14
abc,def,ghi,06-NOV-06,08-JUL-14,jkl,2800
abc,def,ghi,18-NOV-03,08-JUL-14,jkl,3884
abc,def,ghi,14-JUN-06,15-JUL-14,jkl,2953

答案 1 :(得分:0)

不是awk,而是真实的日期/天计算:

#!/bin/bash
read line < input;
echo -n $line; echo "No_Of_Days";
sed '1d' input| 
while IFS=,
read a b c d e f;
do 
 let DIFF=(`date +%s -d $d`-`date +%s -d $e`)/86400;
 echo -n $a,$b,$c,$d,$e,$f,
 echo $(($DIFF *-1));
done  

产生

Desc1,Desc2,Desc3,DATE_ACTIVE,STATEMENT_DATE,Desc4No_Of_Days
abc,def,ghi,21-MAR-08,01-JUL-14,jkl,2293
abc,def,ghi,01-JUL-14,15-JUL-14,jkl,14
abc,def,ghi,06-NOV-06,08-JUL-14,jkl,2801
abc,def,ghi,18-NOV-03,08-JUL-14,jkl,3885
abc,def,ghi,14-JUN-06,15-JUL-14,jkl,2953

答案 2 :(得分:0)

这里的其他示例是unix中的脚本示例,不一定是awk。它可以使用mktime(datespec)函数在一些awk扩展中本地完成,例如nawk或gawk。您需要将日期转换为标准格式:

function getDate(date) {
    split(date, a, "-");
    return mktime("20" a[3] " " sprintf("%02i",(index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", a[2])+2)/3) " " a[1] " 00 00 00")
}

BEGIN {FS=","}

{printf("%i\n",0.4+(getDate($5)-getDate($4))/86400)}

需要额外的0.4来补偿闰秒单位。