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

VNA*_*VNA 2 awk

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

输入.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
Run Code Online (Sandbox Code Playgroud)

期望的输出:

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

有什么建议 ..

Ken*_*ent 5

一种方法是:

 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
Run Code Online (Sandbox Code Playgroud)