awk コマンドを使用して、同じファイル内の 2 つの列間の日付の差を計算する方法を教えてください。

awk コマンドを使用して、同じファイル内の 2 つの列間の日付の差を計算する方法を教えてください。

カンマで区切られた複数列の csv ファイルがあり、日付が異なる 2 つの列 (mm/dd/yyyy) があります。この 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 時間関数

関連情報