![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Возникла задача обработки отчетов, несколько гигабайт файлов, обычный текст. Отчеты разного размера, от нескольких строк до десятка тысяч строк. Необходимо удалить из этих фалов все строки, содержащие определенную последовательность символов.
То есть, например, удалить все строки с текстовой последовательностью "авить" и из файлика с текстом
-----------
Не мысля гордый свет забавить,
Вниманье дружбы возлюбя,
Хотел бы я тебе представить
Залог достойнее тебя
-----------
и получить такой текст:
-----------
Вниманье дружбы возлюбя,
Залог достойнее тебя
-----------
В идеале хотелось бы найти какую-то консольную шуструю утилитку, которую можно натравить на эту кучу фалов в пакетном режиме, но, возможно есть и другие способы?
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
Еще раз спасибо!
То есть, например, удалить все строки с текстовой последовательностью "авить" и из файлика с текстом
-----------
Не мысля гордый свет забавить,
Вниманье дружбы возлюбя,
Хотел бы я тебе представить
Залог достойнее тебя
-----------
и получить такой текст:
-----------
Вниманье дружбы возлюбя,
Залог достойнее тебя
-----------
В идеале хотелось бы найти какую-то консольную шуструю утилитку, которую можно натравить на эту кучу фалов в пакетном режиме, но, возможно есть и другие способы?
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
Еще раз спасибо!
no subject
Date: 2016-11-30 06:21 am (UTC)как работает с нелатинской локалью под венды не знаю - надо пробовать.
есть под cygwin, так и нативно собранная
no subject
Date: 2016-11-30 06:34 am (UTC)no subject
Date: 2016-11-30 06:47 am (UTC)sed, похоже, то, что надо. С awk пока не понял, буду разбираться.
no subject
Date: 2016-11-30 09:40 am (UTC)Конечно, знания лишними не бывают :), но если надо побыстрей сделать ...
no subject
Date: 2016-11-30 10:44 am (UTC)no subject
Date: 2016-11-30 11:09 am (UTC)а) Кодировка: скажем, в файле у Вас кодировка 1251, а то что Вы пишете в командной строке - 866 (спасибо, Билли!). Выход: запишите команду в командный файл (и убедитесь, что командный и обрабатываемый - в одной кодировке!) и запускайте именно командный.
б) Кавычки/апострофы: в документации, делавшейся для пользователей unix/linux , во всех примерах наверняка шаблон заключен в апострофы:
grep 'образец' file.txt
Но командный интерпретатор доса/винды их не отбрасывает, в отличие от unixового. Т.е., с большой вероятностью они становятся частью шаблона, а такого шаблона у Вас в файле и нету, само собой... Выход: попробуйте записать шаблон без кавычек/апострофов:
grep образец file.txt
Возможно также, что Ваш grep умеет брать шаблон из указанного файла - тут надо смотреть доки, есть разные версии grep
no subject
Date: 2016-11-30 11:21 am (UTC)no subject
Date: 2016-11-30 11:51 am (UTC)no subject
Date: 2016-11-30 01:27 pm (UTC)no subject
Date: 2016-11-30 06:35 am (UTC)no subject
Date: 2016-11-30 06:44 am (UTC)no subject
Date: 2016-11-30 06:28 am (UTC)no subject
Date: 2016-11-30 10:27 am (UTC)