Этот ответ в значительной степени зависит от формата даты BSD, доступного на mac
#!/usr/bin/awk -f
BEGIN { FS=" " }
{
split($0, arr, ",")
ts1 = date2ts(arr[ 2 ])
ts2 = date2ts(arr[ 3 ])
days = (ts2-ts1)/86400
date1 = ts2date(ts1)
date2 = ts2date(ts2)
printf("%s,%s,%s,%d days\n", arr[ 1 ], date1, date2, days)
}
function runCmd(cmd) {
cmd | getline output
close(cmd)
gsub("\"", "", output)
return output
}
function date2ts(date) {
return runCmd(sprintf(\
"date -j -f\\\"%%d/%%b/%%Y\\\" \\\"%s\\\" +\\\"%%s\\\"", date))
}
function ts2date(ts) {
return runCmd(sprintf(\
"date -j -f\\\"%%s\\\" \\\"%s\\\" +\\\"%%d/%%m/%%Y\\\"", ts))
}
я получаю следующий результат:
P1,06/07/2013,09/07/2013,3days
P2,06/07/2013,10/07/2013,4days
P3,06/07/2013,15/07/2013,9days
ли вы узнать что-нибудь о хороших ответах [здесь] (http://stackoverflow.com/questions/17670093/вычислить-финиковой разница-между-2-3-из-файла-в-AWK)? Покажи это нам. – Birei
@Birei, я только что заметил ваш комментарий и проверил ссылки, где нашел ответ, с которым я пошел, похож на GlennJackman's. Он указывает, что я должен написать некоторые чистые функции awk. – n0741337