Как использовать команду awk для расчета разницы дат между двумя столбцами в одном файле?

Как использовать команду awk для расчета разницы дат между двумя столбцами в одном файле?

У меня есть CSV-файл с несколькими столбцами, разделенными запятыми, в котором два столбца содержат разные даты (мм/дд/гггг). Я собираюсь определить разницу между этими двумя датами. Ниже приведен пример:

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 Функции времени

Связанный контент