日付が異なる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に無理に分割すると少数の日数が与えられます)。