Страница 1 из 1

Вывод строк из файла по одной с удалением - как?

Добавлено: 2008-04-22 21:49:18
[rain]
Господа, доброго вечера.

Ситуация такая. Решил таки почистить почтовый сервер от хранящихся на нем сообщений с пометкой SPAM, бо места сожрано, чую, немало. Вяю скриптик, который будет пробегаться по директориям пользовательских ящиков, отлавливать письма, в которых есть заветное слово, затем отправлять имя файла письма в текстовичок и из него уже брать по одному в строке имя и переносить письмо в заветное место от глаз подальше. Затык образовался на том, как из файла выдергивать по строке для подстановки в качестве аргумента для команды mv.

Думал организовать такой цикл:

Код: Выделить всё

NUM=`sed -n '$=' spamletter-list.txt` #вычисляем количество строк в файле

        # задаем цикл:
        i=1
                while [ $i -lt $NUM ]
                do
                    mv [ tail -n 1 spamletter-list.txt ] ${spam-dir}
                    sed -e 1d spamletter-list.txt
                    i=`expr $i + 1`
                done
но при внимательном изучении выяснилось, что строчка

Код: Выделить всё

sed -e 1d spamletter-list.txt
удалять физически строки из spamletter-list.txt не намерена, засим ломаю голову. Подскажите пжста, в какую сторону ковырять маны?

Re: Вывод строк из файла по одной с удалением - как?

Добавлено: 2008-04-22 22:23:23
Alex Keda
чё-то ты сложное настругал...
по сабжу

Код: Выделить всё

cat file.txt |
{
while read stroka
do
mv $stroka /path/to/nas =)

done
}
если я верно понял

Re: Вывод строк из файла по одной с удалением - как?

Добавлено: 2008-04-22 22:41:24
[rain]
О блин, слона-то я и не приметил...

Upd. Ога, сработало, огромное спасибище! :P

Re: Вывод строк из файла по одной с удалением - как?

Добавлено: 2008-04-23 3:10:59
Гость
lissyara писал(а):

Код: Выделить всё

cat file.txt |
{
while read stroka
do
mv $stroka /path/to/nas =)

done
}
Фигурные скобки не нужны.
Твой вариант нифига не распараллеливается. Вот распараллеливающийся:

Код: Выделить всё

cat file.txt \
	| xargs -P4 -J% mv % /path/to/nas
-P4 — 4 процесса параллелно.
[rain] писал(а):

Код: Выделить всё

i=`expr $i + 1`
Когда люди наконец перестануть быдлокодить и осилят $((arithmetic expression)).

Код: Выделить всё

unset i
until [ "$((i+=1))" -gt 10 ]; do
	echo $i
	some_serious_magic # :)
done
[rain] писал(а):

Код: Выделить всё

sed -e 1d spamletter-list.txt
[/quote]use `-i ""', Luke. sed -i "" 1d spamletter-list.txt.

Re: Вывод строк из файла по одной с удалением - как?

Добавлено: 2008-04-23 8:53:45
[rain]
Когда люди наконец перестануть быдлокодить и осилят $((arithmetic expression)).
В моем случае -- как только допишу свой первый этот скрипт и стану дальше разбираться в тонкостях этого дела.
По сабжу - спасибо, пошел курить маны.