Титла: awk и xml главоблъсканица Публикувано от: martos в Jul 31, 2013, 17:07 Здравейте,
Опитвам се да променя старт и стоп тайм-а в един xmltv файл - да увелича с един час и да добавя тайм офсет: оригинал: Код: <programme channel="tv.tv" start="20130731213000" stop="20130731223000"> желан резулта: Код: <programme channel="tv.tv" start="20130731223000 +0200" stop="20130731233000 +0200"> awk не ми е силата, та ще съм признателен ако ударите едно рамо :) Титла: Re: awk и xml главоблъсканица Публикувано от: laskov в Jul 31, 2013, 17:35 И защо не го направиш с текстов редактор?
Титла: Re: awk и xml главоблъсканица Публикувано от: solarflux в Jul 31, 2013, 19:22 Мно грозно
echo '<programme channel="tv.tv" start="20130731213000" stop="20130731223000">' | awk '{print $1 " " $2 " " substr($3, 1 ,16) (substr($3,17,1)+1) substr($3, 18, 4) " +0200\" " substr($4, 1, 15) (substr($4, 16, 1) + 1) substr($4, 17, 4) " +0200\">" }' <programme channel="tv.tv" start="20130731223000 +0200" stop="20130731233000 +0200"> желан резултат: <programme channel="tv.tv" start="20130731223000 +0200" stop="20130731233000 +0200"> натам ме мързи да се занимавам но можеш да си направиш скриптче, дето с помощта на грепове да преценява дали редът започва с ^<programme и да го прекарва през аук-а и да го драска във файл, а ако не - да го драска във файл директно... Титла: Re: awk и xml главоблъсканица Публикувано от: neter в Jul 31, 2013, 22:17 solarflux, така няма да стане с такова сумиране на числата. Ако часът е 19:30, с такова сумиране ще стане 110:30. Това може да се избегне, като се понаместят обхватите на substr функциите, но това не решава другият проблем - преминаване към следваща дата, когато часът надхвърли 23:59.
martos, ще ти свърши ли работа такъв ред Код Ако часовата разлика не трябва да е статично забита, а трябва да е текущата часова разлика, която използва системата, замени "+0200" с "%z". Във for-а тръгвам от "i=4", тъй като първото срещане на число за промяна в реда е на 4-то място, вземайки се предвид кавичките за разделител. Може да го намалиш, ако в цялостния XML файл ще имаш срещания и на по-предни места. Освен това, скриптът ще заменя всички стрингове, състоящи се само от цифри и дълги 14 символа. Ако в XML файла ще имаш и други стрингове, състоящи се само от цифри и дълги 14 символа, които не трябва да бъдат заменяни, ще имаш проблем. В if-а би било по-добре да се напише [0-9]{14}, вместо тази дълга поредица от 14 отделни диапазона, обаче нещо не успях да накарам awk да реагира на такъв указател. Може да се ползва [0-9]+ за по-кратко, но така се рискува прихващане и на други стрингове, състоящи се само от цифри, които не са с дължина 14 символа. П.П.: А, да! Ако ти даде грешка за strftime, инсталирай си gawk - функцията пристига с него, но след това можеш да си я ползваш и в awk. Титла: Re: awk и xml главоблъсканица Публикувано от: Demayl в Jul 31, 2013, 23:19 Ето ти на perl ( regex-a на awk ще е подобен )
Код като накрая си слагаш името на твоя файл и виждаш къде е +0200 зада го смениш с каквото искаш Титла: Re: awk и xml главоблъсканица Публикувано от: radoulov в Jul 31, 2013, 23:55 [...] При GNU awk < 4, можеш да използваш --re-interval (или --posix), за да активираш interval expressions (при GNU awk >= 4 са enabled by default). Цитат П.П.: А, да! Ако ти даде грешка за strftime, инсталирай си gawk - функцията пристига с него, но след това можеш да си я ползваш и в awk. Защото след инсталирането awk ще е вече GNU awk (gawk). Титла: Re: awk и xml главоблъсканица Публикувано от: appmaster в Jul 31, 2013, 23:55 //OFF-topic: Не знам за awk, ама xml-a на SMF е супер дървена работа, няма опция за мулти-actions и това е супер кофти, защото трябва да правиш copy-paste за custom themes...
Титла: Re: awk и xml главоблъсканица Публикувано от: martos в Aug 01, 2013, 10:27 Големи благодарности на всички! :)
Със сигурност ми спестихте часове борба :) Решението на Neter ме устройва най-много и ще ползвам него. Още веднъж благодаря! :) |