Вы можете использовать cut
, чтобы разделить интересующие вас символы, затем sort
и uniq -c
, чтобы подсчитать, сколько раз встречаются разные даты:
$ < input cut -c1-6 |sort |uniq -c
3 Jan 2
4 Jan 3
Или используйте awk
, если вас интересует выходной формат:
$ awk '{a[substr($0, 1, 6)] += 1} END { for (x in a) printf "%s : %d\n", x, a[x] }' < x | sort
Jan 2 : 3
Jan 3 : 4
Первый блок использует ассоциативный массив для подсчета того, сколько раз появляется каждая дата, блок end просто выводит даты и их количество. sort
вывод после этого, так как нет никакой гарантии в порядке, в котором ключи выходят из массива.
Я думаю, что размещение года может быть проблемой. Пока это не удается:
host:~ # date -d 'Thu 16 Jan 15:00:00 UTC 2020'
date: invalid date ‘Thu 16 Jan 15:00:00 UTC 2020
это работает на моей виртуальной машине:
host:~ # date -d 'Thu 16 Jan 2020 15:00:00 UTC'
Thu Jan 16 16:00:00 CET 2020
Я добавил формат даты к первому оператору, который работает:
shour=$(date "+%Y%m%d" -d "yesterday 3PM" -u)
ddate="$(date -d "${shour}" -u)"
sdate=$(date "+%Y%m%d" -d "$shour" -u)
date
не удается прочитать вывод по умолчаниюThu 16 Jan 15:00:00 UTC 2020
Любой вывод date
, который вы хотите снова обработать в date
, должен быть отформатирован со строкой формата '+%F %T'
.