如何使用awk获得两个开始日期之间的差异?

时间:2017-01-09 10:13:07

标签: awk

我需要打印每个唯一ID($ 1)的最早日期$ 4和$ 2之间的差异(以天为单位)。

这是数据

32070  2010-12-14    13:25:30  20101211 13:25:30  
41920  2010-12-14    11:30:45  20101213 11:30:45
29446  2010-12-14    04:15:25  20101211 04:15:25   
32070  2011-05-11    08:14:20  20101211 08:12:23
29446  2011-6-22     07:13:24  20101211 10:13:50
41920  2011-5-14     06:15:25  20101213 12:14:05
32070  2011-5-13     12:11:05  20101211 06:12:30
41920  2011-5-16     05:15:08  20101213 15:13:30
29446  2011-6-23     10:20:15  20101211 10:12:16

out put将会是这样的

32070  2010-12-14    13:25:30  20101211 03:25:30 3 
41920  2010-12-14    11:30:45  20101213 08:30:15 1
29446  2010-12-14    04:15:25  20101211 09:15:25 3  
32070  2011-05-11    08:14:20  20101211 04:12:23 3
29446  2011-6-22     07:13:24  20101211 10:13:50 3
41920  2011-5-14     06:15:25  20101213 12:14:05 1
32070  2011-5-13     12:11:05  20101211 06:12:30 3
41920  2011-5-16     05:15:08  20101213 15:13:30 1
29446  2011-6-23     10:20:15  20101211 10:12:16 3

1 个答案:

答案 0 :(得分:0)

@ Alula-我认为第4行的输出有误 - 例如> 2011-05-11(2011年第5个月)和20101211(2010年第12个月)的差异怎么可能是3天? 如果这是一个拼写错误,请你试试,如果有帮助请告诉我。

awk '{gsub(/-/," ",$2);;printf("%s %d\n",$0,(mktime($2 FS 0 FS 0 FS 0)-mktime(substr($4,1,4) FS substr($4,5,2) FS substr($4,7,2) FS 0 FS 0 FS 0))/(3600 * 24))}'  Input_file

如果这有助于您,请告诉我。

编辑:现在也根据OP的请求添加答案。

awk '!A[$2,$4]++{E=$2;R=$4;gsub(/-/," ",E);;printf("%s %d\n",$0,(mktime(E FS 0 FS 0 FS 0)-mktime(substr(R,1,4) FS substr(R,5,2) FS substr(R,7,2) FS 0 FS 0 FS 0))/(3600 * 24))}'  Input_file

@Alula:如果这有助于你,请告诉我。