Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 33
1

Как вывести все строки, находящиеся между словами "start" и "stop"?

22.04.2013, 10:07. Показов 5376. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется вывести на терминал с помощью awk, все строки, находящиеся между словами "start" и "stop". Проблема в том, как задать для awk номера строк, в которых и находятся "start" и "stop".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2013, 10:07
Ответы с готовыми решениями:

Записать в файл каждое второе слово, считанное из первого файла между словами START и STOP
Напишите программу every_second.c, которая на основе исходного файла создаст новый так, что во...

Во второй файл записать каждое второе слово, считанное из первого файла между словами START и STOP
Напишите программу every_second.c, которая на основе исходного файла создаст новый так, что во...

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

Имеется таблица с колонками Proсcess, Weight, Start, Stop. В Start и Stop хранятся начало операции и конец соответственно(datetime)
Помогите выполнить запрос в SQL. Имеется таблица с колонками Proсcess, Weight, Start, Stop. В Start...

7
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
22.04.2013, 10:43 2
Bash
1
2
3
4
5
6
awk '
    BEGIN {f=0}
    /^stop$/ {f=0}
    f {print}
    /^start$/ {f=1}
'
пример
Код
[guest@localhost ~]$ awk 'BEGIN {f=0}; /^stop$/ {f=0}; f {print}; /^start$/ {f=1}'
start
abc
abc
def
def
stop
abc
start
abc
abc
def 
def
stop
[guest@localhost ~]$
1
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 33
23.04.2013, 20:30  [ТС] 3
Спасибо, все работает, но на терминал выводятся строки, находящиеся только между первой парой start-stop, последующие строки сценарий игнорирует, т.е. в вашем примере на терминал выводятся только 3-6 строки.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
24.04.2013, 02:55 4
у меня выводятся из каждой пары
Код
[guest@localhost ~]$ awk 'BEGIN {f=0}; /^stop$/ {f=0}; f {print}; /^start$/ {f=1}'
a
b
c
start
a
a
b
b
c
c
stop
a
b
c
start
a
a
b
b
c
c
stop
a
b
c
[guest@localhost ~]$
0
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 33
25.04.2013, 14:07  [ТС] 5
У меня упорно выводит первую пару. Кстати, а где у вас ссылка на файл из которого мы выводим строки?
Я пишу
Bash
1
awk 'BEGIN {f=0}; /^stop$/ {f=0}; f {print}; /^start$/ {f=1}' t.txt
t.txt - исходный файл. Может по другому нужно?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
25.04.2013, 14:19 6
Цитата Сообщение от eRz Посмотреть сообщение
Кстати, а где у вас ссылка на файл из которого мы выводим строки?
строки берутся из потока ввода, потому что не написано, что нужно брать из файла

Код
[guest@localhost sh]$ cat file.txt 
a1
b1
c1
start
a2
b2
c2
stop
a3
b3
c3
start
a4
b4
c4
stop
a5
b5
c5
[guest@localhost sh]$
[guest@localhost sh]$ awk '
>     BEGIN {f=0}
>     /^stop$/ {f=0}
>     f {print}
>     /^start$/ {f=1}
> ' file.txt
a2
b2
c2
a4
b4
c4
[guest@localhost sh]$
Добавлено через 1 минуту
Цитата Сообщение от eRz Посмотреть сообщение
У меня упорно выводит первую пару.
значит, файл неправильный
1
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 33
25.04.2013, 14:53  [ТС] 7
Спасибо, все работает, почему не работал предыдущий файл, непонятно, ну да не важно. Вот только еще вопрос возник, если чередование start-stop нарушается, программа работает некорректно, например в таком случае:

Код
a
b
c
start
para1
para1
para1
stop
e
f
g
h
start
para2
para2
para2
para2
stop
stop
i
j
k
start 
para3
para3
para3
stop
Получается:
Код
$ bash 9
para1
para1
para1
para2
para2
para2
para2
То есть два stop подряд вводят программу в ступор, это нормально?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
25.04.2013, 15:01 8
Код
[guest@localhost sh]$ awk '
>     BEGIN {f=0}
>     /^stop$/ {f=0}
>     f {print}
>     /^start$/ {f=1}
> ' file.txt
para1
para1
para1
para2
para2
para2
para2
para3
para3
para3
[guest@localhost sh]$
Добавлено через 1 минуту
Цитата Сообщение от eRz Посмотреть сообщение
То есть два stop подряд вводят программу в ступор
не, всё работает
0
25.04.2013, 15:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2013, 15:01
Помогаю со студенческими работами здесь

Удалить из строки все символы, находящиеся между «А» и «В»
1.Дана строка символов. Удалить из нее все символы, находящиеся между «А» и «В». Если таких...

Удалить все лишние пробелы между словами (между словами должен быть только один пробел)
В строке текста слова (последовательности букв) разделены пробелами, возможно не одним. Удалить все...

Строки: удалить все символы, находящиеся между круглыми скобками
Из заданной строки удалить все последовательности символов, находящиеся между корректно записанными...

Из строки удалить все последовательности символов, находящиеся между круглыми скобками
Здравствуйте, нужно написать программу: "Из заданной строки удалить все последовательности...

Вывести все нечетные числа, находящиеся между двумя заданными числами
Даны два числа А и В (А<В), выведи все нечетные числа, размещенные между данными числами на экран....

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru