Doctor (mef_is_toffel) wrote,
Doctor
mef_is_toffel

Category:

Пакетная обработка текстовых файлов, удаление строк

Из-за переезда сообщества useful-faq на какую-то другую площадку граждане смотрители отключили все комментарии, к сожалению. Сохраню хороший рецептик.

Оригинал был тут http://useful-faq.livejournal.com/19676840.html
----------------------------------------------------------------
Возникла задача обработки отчетов, несколько гигабайт файлов, обычный текст. Отчеты разного размера, от нескольких строк до десятка тысяч строк. Необходимо удалить из этих фалов все строки, содержащие определенную последовательность символов.

То есть, например, удалить все строки с текстовой последовательностью "авить" и из файлика с текстом
-----------
Не мысля гордый свет забавить,
Вниманье дружбы возлюбя,
Хотел бы я тебе представить
Залог достойнее тебя
-----------

и получить такой текст:
-----------
Вниманье дружбы возлюбя,
Залог достойнее тебя
-----------

В идеале хотелось бы найти какую-то консольную шуструю утилитку, которую можно натравить на эту кучу фалов в пакетном режиме, но, возможно есть и другие способы?

UPD:
В итоге остановился на sed, сделал батник со строкой
for %%A in (*.txt) do sed -e "/строка1/d" -e "/СТРОКА1/d" %%A > C:\NEW\%%A
Здесь строка1 и СТРОКА1 -- требуемые последовательности в разных регистрах. В принципе, в sed есть флаг I, но у меня он что-то не заработал, поэтому так.
Закидываю его в каталог с отчетами, запускаю, и все файлы с расширением txt копируются в каталог C:\NEW\. Не удалось выполнять для подкаталогов /R, ну это ладно, обойдусь.
Можно и из командной строки:
for %A in (*.txt) do sed -e "/строка1/d" -e "/СТРОКА1/d" %A > C:\NEW\%%A

-----------------
Еще здесь http://useful-faq.livejournal.com/19758986.html -- обсуждение утилиты для копирования файлов с определенными условиями, комментарии открыли.
Tags: софт
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments