У меня есть новый вопрос об этом предыдущем вопросе и ответе Чарльзу Даффи. Мне нужно искать файл .ics и отображать каждый час в IRC, если есть новое событие, которое создано или изменено.Показывать только последнее событие, которое было создано или изменено с помощью файла ics.
старый вопрос: Parsing ICS file with bash
Ответ @ Шарлем Duffy:
#!/bin/bash
handle_event() {
: # put a definition of your intended logic here
}
declare -A content=() # define an associative array (aka map, aka hash)
declare -A tzid=() # another associative array for timezone info
while IFS=: read -r key value; do
value=${value%$'\r'} # remove DOS newlines
if [[ $key = END && $value = VEVENT ]]; then
handle_event # defining this function is up to you; see suggestion below
content=()
tzid=()
else
if [[ $key = *";TZID="* ]]; then
tzid[$key%";"*]=${key##*";TZID="}
fi
content[${key%";"*}]=$value
fi
done
... где handle_event
это функция, которая делает фактическую работу, которую вы заботитесь о. Например, это может выглядеть следующим образом:
local_date() {
local tz=${tzid[$1]}
local dt=${content[$1]}
if [[ $dt = *Z ]]; then
tz=UTC
dt=${dt%Z}
fi
# note that this requires GNU date
date --date="TZ=\"$tz\" ${dt:0:4}-${dt:4:2}-${dt:6:2}T${dt:9:2}:${dt:11:2}"
}
handle_event() {
if [[ "${content[LAST-MODIFIED]}" = "${content[CREATED]}" ]]; then
echo "New Event Created"
else
echo "Modified Event"
fi
printf '%s\t' "$(local_date DTSTART)" "${content[SUMMARY]}" "${content[LOCATION]}"; echo
}
С вашего заданного входного файла и выше сценария bash parse-ics <test.ics
дает следующий результат (с моей текущей локали, часового пояса и языка):
New Event Created
Sun Jun 12 15:10:00 CDT 2016 Ash vs Evil Dead Saison 1 Episode 9 & 10 OCS Choc
Modified Event
Sat Jun 11 15:35:00 CDT 2016 The Mysteries Of Laura Saison 2 Episode 1 à 4 RTS Un (Suisse)
Кстати, это на самом деле не большой вопрос, поскольку это очень специфичные для вашего кода - идеальные факторы StackOverflow вопроса всех деталей для конкретного, кроме у вас возникла проблема, и достаточно всего окружающего кода, чтобы кто-то другой воспроизвел проблему. Итак, вопрос, который исходил из места «Я пытался изменить этот код, мне дали, выполнив X, но у него была ошибка Y, а что случилось?» было бы лучшим местом для такого рода вещей в будущем - даже более того, если бы части, не связанные с местом, где у вас были проблемы, были исключены. –
... Я ответил на это, потому что у меня был готовый ответ, но вы можете попробовать работать с http://stackoverflow.com/help/mcve с любыми подобными вопросами в будущем. –