次の2つの日付がある場合:
2015-09-12,2015-08-13
その間の日数を求めなければなりません。次のコードを使用します。
awk -F'[-,]' '{print 360*($4-$1)+30*($5-$2)+($6-$3)}'
このコードの出力はであり-29
、実際の違いは次のとおりです。29
答え1
awk
次のように関数を定義できます。
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
または:
function abs(v) {v += 0; return v < 0 ? -v : v}
戻り値を負と正の標準形式に変換し、文字列は常に数値に変換されます。これがなければabs($0)
入力レコードの位置が1e2
生成され1e2
、 の場合には-1e2
生成されます-100
。
答え2
この状況の一般的なトリックは平方根を使用することです。
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
答え3
他の方法:
awk -F'[-,]' '{d=360*($4-$1)+30*($5-$2)+($6-$3);print (d>0)?d:-d}'
答え4
あなたが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