The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"cкрипт bash"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"cкрипт bash"  +/
Сообщение от dantecyk (ok) on 09-Дек-13, 14:39 
Здравствуйте, форумчане!

Помогите пожалуйста написать скрипт. Задание такое:
На стандартный ввод вашего сценария поступает файл субтитров к видеоролику в следующем формате:
num
HH:MM:SS,SSS--> HH:MM:SS,SSS
text line 1
text line 2
. . .
Здесь num - номер блока, НН:MM:SS,SSS - начало и конец отображения подписи (text lines) к кадру. Каждый такой блок описывает подпись к очередной группе кадров. Эти блоки разделены пустыми строками. Сценарий должен скорректировать нумерацию блоков следующим образом. Два соседних блока должны иметь номера, отличающиеся на 1. Если очередной блок имеет более раннюю временную метку, он отбрасывается.
Пример:
$ cat cats.srt
144
00:16:12,90 --> 00:16:15,360
Я знаю кошку мягкую,

148
00:16:17,600 --> 00:16:19,680
Чье имя Дженни в точку,

143
00:15:47,960 --> 00:15:49,720
"Кому этот приз?"

144
00:16:22,280 --> 00:16:24,640
она как леопард ряба,

$ ./myscript.sh <cats.srt

144
00:16:12,920 --> 00:16:15,360
Я знаю кошку мягкую,

145
00:16:17,600 -- > 00:16:19,680
Чье имя Дженни в точку,

146
00:16:22,280 --> 00:16:24,640
Она как леопард ряба,

Буду очень благодарен за помощь. Спасибо за внимание.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "cкрипт bash"  +/
Сообщение от pavlinux (ok) on 09-Дек-13, 18:02 
> Помогите пожалуйста написать скрипт.

"Мужик, ну ты хотя бы лотерейный билет купи!" (с) Анек.

> Буду очень благодарен за помощь.

Очевидно, нужно разбить на блоки, которые разделены пустыми строками, и
отбрасывать, если очередной блок имеет более раннюю временную метку.

В чём проблема-то?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "cкрипт bash"  +/
Сообщение от dantecyk (ok) on 09-Дек-13, 19:21 
>> Помогите пожалуйста написать скрипт.
> "Мужик, ну ты хотя бы лотерейный билет купи!" (с) Анек.
>> Буду очень благодарен за помощь.
> Очевидно, нужно разбить на блоки, которые разделены пустыми строками, и
> отбрасывать, если очередной блок имеет более раннюю временную метку.
> В чём проблема-то?

Спасибо за ответ.
Проблема в том, что во-первых, я не понимаю, как обратиться к конкретной строке, а во-вторых, не могу понять каким способом сравнивать время. на сколько я понимаю, нужно как то суммировать отдельные числа и потом сравнить, но как это сделать, я не понимаю... :(

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "cкрипт bash"  +/
Сообщение от Andrey Mitrofanov on 09-Дек-13, 18:12 
> Пример:
> $ cat cats.srt
> 144
> 00:16:12,90 --> 00:16:15,360
> Я знаю кошку мягкую,

$ cat_srt |awk -F \\n -v RS="\n\n" 'BEGIN{ORS=RS;OFS=FS}{if(nn=="")nn=$1;if(t==""||$2>t){$1=nn++;print;t=$2}}'
144
00:16:12,90 --> 00:16:15,360
Я знаю кошку мягкую,

145
00:16:17,600 --> 00:16:19,680
Чье имя Дженни в точку,

146
00:16:22,280 --> 00:16:24,640
она как леопард ряба,

$ _

> Буду очень благодарен за помощь. Спасибо за внимание.

Пожалуйста.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "cкрипт bash"  +/
Сообщение от dantecyk (ok) on 09-Дек-13, 19:22 
>[оверквотинг удален]
> Я знаю кошку мягкую,
> 145
> 00:16:17,600 --> 00:16:19,680
> Чье имя Дженни в точку,
> 146
> 00:16:22,280 --> 00:16:24,640
> она как леопард ряба,
> $ _
>> Буду очень благодарен за помощь. Спасибо за внимание.
> Пожалуйста.

Андрей Митрофанов, спасибо большое за помощь. Если бы ты смог еще за комментировать хотя бы часть. А то у тебя написано мне кажется больно продвинутым способом, который мне понять пока не удается...

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "cкрипт bash"  +/
Сообщение от Andrey Mitrofanov on 09-Дек-13, 21:11 
> Андрей Митрофанов, спасибо большое за помощь. Если бы ты смог еще за
> комментировать хотя бы часть. А то у тебя написано мне кажется
> больно продвинутым способом, который мне понять пока не удается...

~Кончный автомат, читающий записи, разделённые пустой строкой, выводящий только те, что подходят и нумерующий их последовательно с номера, взятого из первой записи.

|awk -F \\n -v RS="\n\n" ' BEGIN{ORS=RS;OFS=FS}  #Это устновка
   #служебных переменных  для разделения вх.и вых.записей двумя переводами
   #строки, и поля внутри записей - одним переводом строки.

    {  #продвинутая програма AWK исполняет блок без условий для каждой строки
       # - записи то есть - и разбивает её на поля. Ою этом можно подробнейше
       # почитать в man awk-е

    if(nn=="")nn=$1   #тут в переменную кладётся номер блока, но только(1) первый(-ого)
    if(t==""||$2>t){  #если это первый блок(1) или время(2) позже, чем у предыдущего
        $1=nn++ #(2)
        print        #, то выводим этот блок.
        t=$2 #(3)
        }
    } # здесь блок "для каждой строки" закончился

#-(2) вывод каждой записи сопровождается установкой её номера из инкрементируемой
#тут же переменной nn
#-(3) в переменной t сохраняется время тек.записи - для сравнения со временем следующей
#-(1) по ходу дважды используется свойствот продвинутой програмы AWK считать
#   неициализированные переменные имеющими пустое строковое значение.

'


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "cкрипт bash"  +/
Сообщение от dantecyk (ok) on 09-Дек-13, 21:48 
>[оверквотинг удален]
>         t=$2 #(3)
>         }
>     } # здесь блок "для каждой строки" закончился
> #-(2) вывод каждой записи сопровождается установкой её номера из инкрементируемой
> #тут же переменной nn
> #-(3) в переменной t сохраняется время тек.записи - для сравнения со временем
> следующей
> #-(1) по ходу дважды используется свойствот продвинутой програмы AWK считать
> #   неициализированные переменные имеющими пустое строковое значение.
> '

Андрей Митрофанов, спасибо большое!!!
А можно с тобой как нибудь связаться, чтобы не засорять тут форум, спросить пару вопросов?(скайп или почта)?
з.ы вознаграждение гарантирую (:

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "cкрипт bash"  +/
Сообщение от pavlinux (ok) on 09-Дек-13, 23:29 
> з.ы вознаграждение гарантирую (:

Что ж ты раньше молчал. С этого нужно начинать тему. :)


Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

6. "cкрипт bash"  +/
Сообщение от pavlinux (ok) on 09-Дек-13, 21:26 
> Если бы ты смог еще за  комментировать хотя бы часть. А то у тебя написано мне кажется
> больно продвинутым способом, который мне понять пока не удается...

Митрофанов и комментарии не совместимы. :)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру