PDA

Показать полную графическую версию : TextPipe: несколько вопросов.


zakk
29-01-2011, 23:49
1. как обьединить 1ю и 2ю строку.
2. как заменить "двоеточие знак абзаца" на "двоеточие пробел" (не нашел в спец символах знака абзаца)
3. как найти 2ва определенных слова и удалить все что между ними. (например: ...как я провел лето... -> ...как лето...)
4. как сохранить конечный файл с именем из 1й строки этого файла.


прикрепил архив с исходниками, если кто захочет взглянуть поглубже -)

truvo
01-02-2011, 02:52
Классная программа... только вот я забыл, как ею пользовался :( .

regga5
14-01-2014, 21:03
Подскажите и мне пожалуйста.

Нужно удалить строки, в которых больше 7-ми слов.
(один символ тоже считается словом)

:)

AMDBulldozer
14-01-2014, 21:12
awk '{ if( NF<8 ) print}'

regga5
15-01-2014, 01:01
awk '{ if( NF<8 ) print}' »

Краткость сестра таланта :)

Удалить строки => Удалить не согласующиеся строки =>

не выходит.
Как я понимаю это вообще в cmd пишется?

Для символов работает такое:

^.{10}

Тоесть фильтр убирает строки в которых меньше 10 символов.

http://s017.radikal.ru/i427/1401/61/c350a14f01d3.jpg

AMDBulldozer
15-01-2014, 01:23
Удалить строки => Удалить не согласующиеся строки => »
Зачем их удалять? Это тоже можно сделать, но смысла в этом я не вижу никакого.
Ведь удалить строки - это не цель. Не может быть у здравомыслящего человека такой цели. Это всё равно, что объявить целью копание ямы. Но ни одному нормальному человеку копать яму не нужно - ему нужно, чтобы она была выкопана. Безразлично каким образом.
Это относится и к Вашему случаю. Я полагаю, Вы легко объясните преподавателю, что удалять строки - не самоцель. Цель - получить файл без этих строк. Логично?
Что делаем:
1. Выводим файл на стандартный вывод: "cat $1"
2. Используем фильтр, который пропускает только строки в которых менее 8 полей. Полем называется непрерывная последовательность непробельных символов (т.е. не содержащих пробела, вертикальной и горизонтальной табуляции, перевода строки и возврата каретки - тех символов, для которых функция языка C isspace() выдает ненулевое значение). Вы их называете "словами": awk '{ if( NF<8 ) print}'
3. После второго этапа мы получили на stdout поток из которого удалены все строки содержащие 7 и менее слов. Сохраняем его во временном файле: > $1.tmp
4. Переименовываем временный файл, заменяя им исходный - voila, задача выполнена: mv $1.tmp $1


Итого получили:
cat $1 | awk '{ if( NF<8 ) print}' > $1.tmp; mv $1.tmp $1

regga5
15-01-2014, 01:33
Логично? »
Да, согласен.

Буду делать.
В догонку, есть вариант проще?

По идеи можно покрутить поле "Удалить не согласующиеся строки" и обойтись 10-15 символами.

AMDBulldozer
15-01-2014, 03:35
есть вариант проще? »
Так проще?
sed -ri '/(\S+\s+){7}\S/d' file

regga5
25-01-2014, 14:29
sed -ri '/(\S+\s+){7}\S/d' file »

Все обошлось простым способом

Удалить строки => Удалить не согласующиеся строки => Pattern (perl) => ^([^\s]+\s?){0,7}$

:)

А в этом поможете? :)

Как удалить строки, которые содержат только цифры?
Как удалить строки, в которых есть "шт" (только целые слова и "шт" сразу после символов, например 100шт, 2шт)?
Как удалить строки которые начинаются с символов? Например "01234567890" или "5448вебмастер" или "348953948 вебмастер"
Как просеять строки по фильтру а-я, a-z, 0-9? Оставив строки, в которых нет каких либо любых спец. символов, а только буквы и символы.




© OSzone.net 2001-2012