Гость
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Фильтрация и редактирование текста / 16 сообщений из 16, страница 1 из 1
27.04.2004, 09:54
    #32497924
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Имеется текстовый файл, в котором все строки, начиная с определенной (например с "***") и заканчивая строкой в которой есть символ ";" надо вырезать из этого текстового файла (и вставить их в новый файл). Как это сделать скриптом на shell ? Ипользовать надо только команды шелла (awk, grep, sed), использование perl и других не допускается.
...
Рейтинг: 0 / 0
27.04.2004, 10:37
    #32498026
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Andron
Ипользовать надо только команды шелла (awk, grep, sed), использование perl и других не допускается.

А с чего это вдруг awk и компанию вы к командам шела причислили? Это такие же внешние
программы как и перл. В связи с чем непонятно чем вызвана такая дискриминация одних внешних
программ по отношению к другим

Ну и на счет самого вопроса - мне кажется, что такие проблемы лучше решать самому (задача для студентов первокурсников соответствующих вузов), а не выносить в форум.
...
Рейтинг: 0 / 0
27.04.2004, 10:56
    #32498088
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Мне интересны варианты решения этой задачи, поэтому я и задал этот вопрос в форуме. Если сказать по конкретике вопроса нечего, флейм не надо устраивать.
...
Рейтинг: 0 / 0
27.04.2004, 11:09
    #32498131
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Ну не надо, так не надо
Мне просто за перл обидно - почему он исключается-то?
...
Рейтинг: 0 / 0
27.04.2004, 11:13
    #32498150
Их есть у меня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
вот такое шоли

#########################

#!/bin/sh

infile=$1
outfile=$2
template1="***"
template2=";"
flag=0

>$outfile

cat $1 |
while read s
do
[ "$template1" = "$s" ] && flag=1

[ "$flag" -eq 1 ] && echo "$s" >> $outfile
echo $s | grep "$template2" >/dev/null && flag=0
done

######################

а собсна какой критерий что shell а что не shell...
тада и sed тоже не shell.. а только внутренними командами shell много не сделаешь!
...
Рейтинг: 0 / 0
27.04.2004, 11:19
    #32498170
Их есть у меня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Ув. Somebody2 а насчет внешних программ- perl действительно внешняя
и необязательная. В старых системах Unix мы ее не найдем по дефолту,
не найдем и в эмулятораз вроде UWin (насчет cygwin не знаю) и может скоро не
найдем и во Free BSD по умолчанию (вроде выкинуть его хотели)
...
Рейтинг: 0 / 0
27.04.2004, 11:28
    #32498202
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Ув. их есть у меня собсна критерий что есть шелл, а что не есть шелл у меня довольно
простой: Если команда является встроенной командой шелл, то это шелл , в противном случае
это внешняя программа С этой точки зрения awk и perl абсолютно равноправны. Не знаю как в
темном прошлом и в светлом будущем, но в настоящем обе ставятся по дефалту

А вот слабо действительно только внутренними командами shell обойтись?
...
Рейтинг: 0 / 0
27.04.2004, 11:34
    #32498218
Их есть у меня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Ув. Somebody2, обычно под shell programming понимают все же и использование
текстовых утилит unux. Ваша задача конечно забавная ;))
Но! ее тогда уж решать не навороченными bash, zsh и прочими, а обычным sh.
!!!!!
(правда у многих ли он есть? :))

*****************
для автора - вариант awk

############################3

#!/bin/awk -f
BEGIN{
outputfile="my file"
template1="***"
template2=";"
flag=0
print "" >> outputfile
}
{
if($0==template1){flag=1}
if(flag==1){print $0 >> outputfile}
if($0 ~ template2){flag=0}
}

###############
...
Рейтинг: 0 / 0
27.04.2004, 11:50
    #32498281
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
2 Их есть у меня
Ну фиг с ним уговорили, да будет так: perl - внешняя, awk - внутренняя .
А как насчет решения данной задачи только средствами хотя бы навороченного bash-а?

Я вот себе загрузочную дискету для Линукса сваял - bash туда воткнуть ухитрился, а вот для
grep с awk и sed места не нашлось Помогите плиз, решить эту задачку, а то мне самому ее
решать придется
...
Рейтинг: 0 / 0
27.04.2004, 11:56
    #32498303
Их есть у меня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Ув. Somebody2, ну какая разница внешняя-внутренняя- sed и прочие
- принадлежность shell, ведь никого Вы не призываете на С
программировать без #include ? ))

Хотя тоже можно наверное. Функцию main(){} там написать :)
...
Рейтинг: 0 / 0
27.04.2004, 12:18
    #32498367
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
2 их есть у меня
Без легкого флейма все таки обойтись не удалось
автор
не призываете на С программировать без #include

Прежде всего я вообще никого ни к чему не призывал, а только спрашивал Тем не менее ,
сравнение, как мне кажется, несколько неправильное. Директивой include вы просто вставляете
файл, являющийся по сути своей тем же самым фрагментом программы на языке того же самого
C, (кстати аналогичную вставку файла можно сделать и в bash), тут скорее было бы более
уместно сравнить с подключением библиотек - такая то библиотека стандартная, а такая то нет

Ну да ладно, я уже понял, задачу за меня вы решать не собираетесь Придется самому -
прикола ради
...
Рейтинг: 0 / 0
27.04.2004, 12:18
    #32498368
Их есть у меня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Ув. Somebody2 спецьяльна для Вас

#####################
#!/bin/sh

infile=$1
outfile=$2
template1="***"
template2=";"
flag=0

echo "" > "$outfile"

cat $1 |
while read s
do
[ "$template1" = "$s" ] && flag=1
[ "$flag" -eq 1 ] && echo "$s" >> $outfile
case "$s" in
*$template2*) flag=0
esac
done
#####################

а теперь подумаем - если команды echo и test - внешние ????? ))))
...
Рейтинг: 0 / 0
27.04.2004, 12:20
    #32498377
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Oops
Немного опоздал - спасиб, будем смотреть
...
Рейтинг: 0 / 0
27.04.2004, 12:23
    #32498386
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
>а теперь подумаем - если команды echo и test - внешние ????? ))))
У bash они есть и в числе встроенных. Не знаю какую bash предпочитает по умолчнаию (при
наличии внешних echo и test) Да и какая разница?
...
Рейтинг: 0 / 0
27.04.2004, 12:41
    #32498442
Их есть у меня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
А вот можно ли это сделать на чистом sed ???
...
Рейтинг: 0 / 0
27.04.2004, 13:01
    #32498501
Их есть у меня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация и редактирование текста
Ну раз все молчат - вот решение ))
(чистый sed; cat myfile | ./test.sed > myfile2)

#######################

#!/bin/sed -nf

/\*\*\*/ h
x
/\*\*\*/ {
x
p
}
/;/ {
q
}

######################
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Фильтрация и редактирование текста / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]