awkコマンドを使用して、同じファイル内の2つの列間の日付差を計算する方法は?

awkコマンドを使用して、同じファイル内の2つの列間の日付差を計算する方法は?

日付が異なる2つの列(mm / dd / yyyy)を持つカンマ区切りの複数列csvファイルがあります。私はこれら2つの日付の違いを見てみましょう。例は次のとおりです。

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オプションのフラグを0に設定すると、夏時間を無視します(そうでない場合は、86400に無理に分割すると少数の日数が与えられます)。

バラよりGawk:効率的なAWKプログラミング、9.1.5 時間機能

関連情報