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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
[rain]
рядовой
Сообщения: 16
Зарегистрирован: 2008-04-14 21:32:27
Контактная информация:

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

Непрочитанное сообщение [rain] » 2008-04-22 21:49:18

Господа, доброго вечера.

Ситуация такая. Решил таки почистить почтовый сервер от хранящихся на нем сообщений с пометкой 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 не намерена, засим ломаю голову. Подскажите пжста, в какую сторону ковырять маны?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2008-04-22 22:23:23

чё-то ты сложное настругал...
по сабжу

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

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

done
}
если я верно понял
Убей их всех! Бог потом рассортирует...

[rain]
рядовой
Сообщения: 16
Зарегистрирован: 2008-04-14 21:32:27
Контактная информация:

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

Непрочитанное сообщение [rain] » 2008-04-22 22:41:24

О блин, слона-то я и не приметил...

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.

[rain]
рядовой
Сообщения: 16
Зарегистрирован: 2008-04-14 21:32:27
Контактная информация:

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

Непрочитанное сообщение [rain] » 2008-04-23 8:53:45

Когда люди наконец перестануть быдлокодить и осилят $((arithmetic expression)).
В моем случае -- как только допишу свой первый этот скрипт и стану дальше разбираться в тонкостях этого дела.
По сабжу - спасибо, пошел курить маны.