我需要打印每个唯一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
答案 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:如果这有助于你,请告诉我。