2つの日付以下の場合:
2015-09-12,2015-08-13
そして、それらの間の日数を取得する必要があります、私は以下のコードを使用します:
awk -F'[-,]' '{print 360*($4-$1)+30*($5-$2)+($6-$3)}'
このコードの出力は-29
実際の違いは29
次のように、awk
で関数を定義できます。
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
この種の状況での一般的なトリックは、平方根を使用することです。
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
別の方法:
awk -F'[-,]' '{d=360*($4-$1)+30*($5-$2)+($6-$3);print (d>0)?d:-d}'
GNU awk
を使用していると仮定すると、ファンキーなmktime
関数がここで役立ちます。
awk -F, '{ gsub(/-/," ",$0);a=(mktime($2 " 23 59 59")-mktime($1 " 00 00 00"))/86400;print a*(a<0?-1:1)}' file.txt
29
遅くなりましたが、ここにGNU date
コマンドを使用した解決策があります。これは、上記の投稿のすべての回答がそれを考慮した毎月30日の固定に基づいていませんが、 steve's答え 。
awk -F, '{cmd="printf \"%d\n\" $((($(date -d"$1" +%s)-$(date -d"$2" +%s))/86400))";
cmd|getline $0; $0*=($0<0?-1:1); close(cmd)}1' infile
以下の入力の場合:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
出力は次のとおりです:
30
28