如何使用awk命令计算同一文件中两列之间的日期差?

如何使用awk命令计算同一文件中两列之间的日期差?

我有一个多列 csv 文件,以逗号分隔,其中有两列具有不同的日期 (mm/dd/yyyy)。我将找出这两个日期之间的差异。以下是示例:

echo filename
    001xxxc,28.2,03/04/2009,11/19/2009
    00cvbfd,34.4,03/04/2009,01/06/2010
    04rsdsd,34,12/01/2006,10/02/2001
    456dfds,40,12/01/2006,04/23/2002
    et556ss,40.8,12/01/2006,10/22/2002

我想知道是否可以使用 awk 命令来获取日期差异。

我尝试了这个 awk 命令,但我确信这不是正确的方法?

awk -F, '{print $1","$2","$3-$4}' filename

答案1

假设你想要天数的差异,那么如果你有 GNU awk ( gawk) 你可以做类似的事情

gawk -F, '
  {
    split($3,a,"/"); 
    split($4,b,"/"); 
    t1 = mktime(sprintf("%d %d %d 0 0 0 0",a[3],a[1],a[2])); 
    t2 = mktime(sprintf("%d %d %d 0 0 0 0",b[3],b[1],b[2])); 
    print (t2-t1)/86400
  }
' filename
260
308
-1886
-1683
-1501

参数mktime必须是格式的字符串"YYYY MM DD HH MM SS [DST]";将可选DST标志设置为零会告诉它忽略夏令时(否则天真除以 86400 会得到小数天)。

Gawk:有效的 AWK 编程,9.1.5 时间函数

相关内容