Я бы позвонил переводчику Python для этого. Принятие принятого ответа от Использование Python для подсчета количества рабочих дней в месяце? -
countBusinessDaysPy=$(cat <<'EOF'
import datetime, sys
businessdays = 0
startDate = datetime.date.fromisoformat(sys.argv[1])
endDate = datetime.date.fromisoformat(sys.argv[2])
if endDate < startDate:
(startDate, endDate) = (endDate, startDate)
while startDate <= endDate: # change from <= to < to not count both start and end days
if startDate.weekday() < 5:
businessdays += 1
startDate += datetime.timedelta(days=1)
print(businessdays)
EOF
)
countBusinessDays() { python3 -c "$countBusinessDaysPy" "$@"; }
... дает вам функцию оболочки, которая вызывает Python переводчик для выполнения необходимой математики (обратите внимание, что это диапазон включительно ). После этого:
$ countBusinessDays 2019-01-01 2020-01-01
262
$ countBusinessDays 2019-01-01 2019-01-07
5
Вызов этого цикла для вашего файла (обратите внимание, что в реальном мире цикл в Python, а не bash) может выглядеть следующим образом:
{
read -r header; printf '%s\n' "$header,TotalDates"
while IFS=, read -r resolved startOfWork rest; do
printf '%s\n' "${resolved},${startOfWork}${rest:+,$rest},$(countBusinessDays "$startOfWork" "$resolved")"
done
} <yourInputFile
... который выдает в качестве вывода:
Resolved,StartOfWork,TotalDates
2020-01-16,2020-01-10,5
2020-01-13,2020-01-13,1
2020-01-20,2020-01-15,4
2020-01-20,2020-01-14,5
2020-01-14,2020-01-09,4
2020-01-09,2020-01-08,2
2020-01-16,2020-01-14,3
2020-01-09,2020-01-07,3
2020-01-14,2020-01-12,2