Shell programming

Quantum Leap

Старожил
на будущее

info sed

обычно помогает.

Еще есть волшебная команда grep. А именно grep с ключиком -v
 

Quantum Leap

Старожил
оживим дохлый форум

если не понравились мои советы, дело твое

только ни к чему это пренебрежение, советы давай, но и чужими не гнушайся
 

Quantum Leap

Старожил
Прохожий":3r953qcr сказал(а):
Едем дальше :) Пытался сделать на awk контрукцию, которая бы из файла вырезала кусок, ограниченный сверху и снизу некой последовательностью символов. Имя файла и сама последовательность передаются как параметры в командной строке. К сожалению, не нашел толковой доки по awk, все какие-то недоделаные, поэтому застрял. Если у кого есть - поделитесь, если кто с awk дружит - можно сразу код, по нему разберусь. Варианты с perl, c, pascal и т.д. не предлагайте, это я и сам могу, интересен awk и только он.

Хорошая документация по GNU awk - это опять же info gawk.

Итак: пишем такой вот код:
Код:
BEGIN { st=0; en=0;}
$0 ~ STAR { if(st == 0) {st=1;en=0;}}
$0 ~ ENST { if(en==0) {st=0;en=1; print $0;}}
{ if(st==1 && en==0) print $0; }
скажем в файл cut_balls.awk

Запускаем строчкой
[user@host]$ gawk -v STAR=first_expr_we_want_to_find -v ENST=last_expr_we_want_to_find -f cut_balls.awk TextFile_We_Want_to_Cut.TxT

И вуаля.
 

Quantum Leap

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

Есть вероятность, что regex, который передается в командной строке как-то корежится шелом.
 

Quantum Leap

Старожил
:D

Что ж ты сразу не сказал, что начало и конец могут иметь одинаковые паттерны :)...

Тогда так

Код:
 BEGIN { st=0; en=0;prv=0;}
$0 ~ STAR { if(st == 0) {st=1;en=0;prv=1;}}
$0 ~ ENST { if(en==0 && prv ==0) {st=0;en=1; print $0;}}
{ if(st==1 && en==0) {print $0;prv=0;} }

Оптимизацию оставляю благодарным читателям как упражнение :twisted:
 

Majik13

Старожил
2Прохожий
Все глаза проглядел, слова "спасибо" не увидел. Поблагодарил бы человека за беспокойство ;)
 

Quantum Leap

Старожил
Кстати картинка насчет awk sed grep : )
awkgrep.jpg
[/u]

Насчет благодарностей - мне слова ни к чему :). Спасибо не булькает :)
 

x_0040h

Старожил
Немного не в тему, но у кого нибудь есть ключик под Kylix3???
 

DrunkSantaClaus

Старожил
Такой же вопрос как в начале темы :) Как удалить строку из файла средствами Python?
 

QL

Старожил
аргументы: 1 - RegExp (регулярное выражение) 2 - имя входного файла 3 - имя результирующего файла

Код:
#!/usr/bin/env python
import re,sys
# open a file
file = open(sys.argv[2],"r")
text = file.readlines()
file.close()
# searching the file content line by line
keyword = re.compile(sys.argv[1])
for line in text:
    result = keyword.search (line)
    if result:
         text.remove(line)
#write file
open(sys.argv[3],"w").writelines(text)

Например:
./cutline.py 'cutme.+' file.input file.output
 

DrunkSantaClaus

Старожил
Спасибо. Изначально использовал примерно этот алгоритм :) Просто показался каким-то тяжеловесным :)
 

QL

Старожил
Я питон знаю довольно поверхностно, поэтому оптимизацией и граничными случаями решил не заниматься.
Могу только сказать, что использовать питон для таких задач довольно странно.
 

Miges

Старожил
miges@miges:~> ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3140 0.0 0.1 1960 640 tty5 Ss+ 18:44 0:00 /sbin/mingetty tty5
root 3141 0.0 0.1 1960 640 tty6 Ss+ 18:44 0:00 /sbin/mingetty tty6
miges 3255 0.0 0.2 3924 1400 ? Ss 18:44 0:00 /bin/sh /usr/X11R6/bin/kde
miges 3295 0.0 0.1 3304 520 ? Ss 18:44 0:00 dbus-daemon --fork --print-pid

Не выходит средствами Cut отобрать1й и 2й столбец.
Пробовал ps aux | cut -f1,2 и ps aux | cut -f1,2 -d' ' , но на экране (ой! терминале!) не то ...
Помогите пожалуста.
Еслиб разделитель был " : ", то былоб проще...
 

amazing

Старожил
С разделителем:
Код:
ps aux | awk '{ print $1 " : " $2 }'

Без:
Код:
ps aux | awk '{ print $1 $2 }'
 

Miges

Старожил
amazing":f7wx5pzd сказал(а):
В лабораторной моей cut`ом просят сделать :D
Спасибо.
Кстати, когда увеличиваю -f1-10, то получается, похоже, что -d' ' каждый пробел за столбец считает, а без него не работает, хотя по умолчанию tab должен быть разделителем.
 

amazing

Старожил
а. Я подумал, что важен результат, а не средства :)

Опять же, в результате должно быть два столбца?

Код:
ps aux | cut -c 0-15

Отрезаем кусок с 1го до 16го символа :)
 
Верх