回答:
次の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)}'
sqrt(x^2)
。
遅刻しますが、ここにGNU date
コマンドを使用したソリューションがあります。これは、上記のすべての回答がスティーブの回答と見なした毎月30日の固定に基づいていません。
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
sqrt(x^2)
は問題ありませんsqrt(x)^2
が、小さなエラーが発生する可能性があります。busyboxのawk
場合、数学サポートを有効にしてビルドする必要があります(たとえば、Debianパッケージのデフォルトではありません)。