Мой календарь SO Go потерпел крах, и я получил 5 разных файлов ics с разных устройств, которые одновременно были синхронизированы с сервером. События в каждом файле в основном одинаковы, но в каждом файле есть несколько уникальных событий. пытаюсь сделать один файл ics, который содержит все уникальные события в bash. До сих пор я был в состоянии устранить дубликаты, которые имеют один и тот же UID, с помощью следующего кода:
#!/bin/bash
declare -a puids
while read -r p; do
if [[ "$p" != *BEGIN:VEVENT* ]]; then
echo $p
#all lines on top of file are printed until the first event
else
#the else clause is executed at the start of an event
read -r q
#that's the next line which should be the uid
if [[ -v puids["$q"] ]]; then
# this uid has already been printed
while [[ "$q" != *END:VEVENT* ]]; do
read -r q
done
else
echo $p
while [[ "$q" != *END:VENVENT* ]]; do
echo $q
read -r q
done
echo $q
#q should equal the end:vevent line
fi
fi
while read -r p; do
echo $p
done
done < "$1"
К сожалению, это все еще приводит к дублированию некоторых событий, потому что разные телефоны должны были переназначить разные UID. Любые мысли о том, как использовать массив bash для устранения этих повторяющихся событий?
Вот пример из файла ics:
BEGIN:VEVENT
CREATED:20200111T032850Z
LAST-MODIFIED:20200111T032850Z
DTSTAMP:20200111T023515Z
UID:15787101159003d6047c6800240939a4e21326acef35e@sufficientlysecure.org
SUMMARY:Sarasota
ORGANIZER:mailto:joedebby@dbr.jr
DTSTART;TZID=/freeassociation.sourceforge.net/America/Cayman:20191230T0830
00
DTEND:20191230T213000Z
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;VALUE=DURATION:-PT60M
DESCRIPTION:Sarasota
X-EVOLUTION-ALARM-UID:b58c68f0b0cccdcce0692f54d5e066332559493d
END:VALARM
END:VEVENT
BEGIN:VEVENT
CREATED:20200111T032943Z
LAST-MODIFIED:20200111T032943Z
DTSTAMP:20200111T022536Z
UID:1578709537738a2d30f66b6a1498cadbd3d4ff1f01d13@sufficientlysecure.org
SUMMARY:Sarasota
ORGANIZER:mailto:joedebby@dbr.jr
DTSTART;TZID=/freeassociation.sourceforge.net/America/New_York:20191230T08
3000
DTEND:20191230T213000Z
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;VALUE=DURATION:-PT60M
DESCRIPTION:Sarasota
X-EVOLUTION-ALARM-UID:cfbc357d80d9e53ad0b0e60d63905add8ddf2cc1
END:VALARM
END:VEVENT
Как вы можете видеть разные телефоны каждый однако в другом термине для одного и того же часового пояса время начала и окончания совпадают. UID разные, поэтому мой сценарий считал их отдельными событиями.