Yanıtlar:
İşlevleri aşağıdaki awk
gibi tanımlayabilirsiniz :
awk -F'[-,]' '
function abs(v) {return v < 0 ? -v : v}
{print abs(360*($4-$1)+30*($5-$2)+($6-$3))}'
Bu tür durumlar için ortak numara, karenin kare kökünü kullanmaktır:
awk -F'[-,]' '{print sqrt((360*($4-$1)+30*($5-$2)+($6-$3))^2)}'
sqrt(x^2)
.
Geç, ancak burada date
her ay 30 gün sabit olmayan GNU komutunu kullanan bir çözüm var, yukarıda verilen tüm cevaplar bunu düşündü ama steve'nin cevabı .
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
Aşağıdaki giriş için:
2015-09-12,2015-08-13
2017-02-12,2017-03-12
Çıktı:
30
28
sqrt(x^2)
iyi olduğunu, ancaksqrt(x)^2
sürprizlere neden olabilecek küçük hatalar getirebileceğini unutmayın. Meşgul kutusu içinawk
, matematik desteği etkinleştirilmiş olarak oluşturulması gerekir (örneğin Debian paketlerinde varsayılan değer değildir).