Показать полную графическую версию : [решено] Копирование строк в отдельный файл по условию
Seryoga204
24-08-2010, 23:20
Ув. форумчане подскажите пожалуйста, как можно скопировать из файла (С:\1.txt)- все строки которые начинаются на:
/1000
/2000
/3000
/4000
/5000
/6000
, в файл 2.txt ?
Seryoga204,
Echo on & Chcp 1251
Set "$SRS=F:\probe\переименование\1.txt"
Set "$DST=F:\probe\переименование\2.txt"
:loop
Set /a $num+=1
If /i %$num% GTR 6 goto :Eof
Set $Crt=^/%$num%000
For /f "tokens=*" %%a in ('^<%$SRS% Find /i "%$Crt%"') Do Echo %%a >> %$DST%
goto loop
Seryoga204
25-08-2010, 00:51
Спасибо большое все отлично работает, только батник :teeth: не завершает работу, а по кругу отбирает записи?
Seryoga204,
почему не завершает? Сколько там у Вас записей с подобным критерием отбора?
goto :Eof » - там не просто так...
Seryoga204
25-08-2010, 01:28
Все получилось! Спасибо!
FindStr /BRC:"/[1-6]000" 1.txt >2.txt
Seryoga204
25-08-2010, 03:31
amel27,Спасибо! а если еще надо строки которые начинаются со слова "Отдел", так чтобы в файле 2.txt сохранилась последовательность?
еще надо строки которые начинаются со слова "Отдел" »
зависит от исходной кодировки текстового файла, для DOS (OEM/866) всё просто:
FindStr /BRC:"/[1-6]000" /C:"Отдел" 1.txt >2.txt
для WIN (ANSI/1251) требуется промежуточная перекодировка во временный файл, типа:
(см. аттач, спецсимволы не дали корректно запостить код)
...либо вместо штатной FINDSTR использовать альтернативы типа GREP
Seryoga204
26-09-2010, 10:11
FindStr /BRC:"/[1-6]000" /C:"Отдел" 1.txt >2.txt
А можно сделать так:
чтобы также копировалась следующая строка идущая после строки удовлетворяющей условию?
и в файле 2.txt в начале скопированных строк прописывалось значение "999 "?
чтобы также копировалась следующая строка идущая после строки удовлетворяющей условию »штатными средствами непросто, как вариант (текстовый файл в DOS-кодировке):@echo off
SetLocal EnableDelayedExpansion
set fi=1.txt
set fo=1.out
(for /f "tokens=1 delims=:" %%i in ('findstr /brnc:"/[1-6]000" /c:"Отдел" "%fi%"') do (
set /a $j=%%i+1& for /f "tokens=1* delims=[]" %%a in (
'find /v /n ""^<"%fi%"^|findstr /bc:"[%%i]" /c:"[!$j!]"') do echo.%%b
)) >"%fo%"
вариант на SED (текстовый файл в WIN-кодировке):set fi=2.txt
set fo=2.out
sed -n "/^\/[1-6]\|^Отдел/{p;n;p;}" "%fi%" >"%fo%"
вариант на AWK (текстовый файл в WIN-кодировке):set fi=3.txt
set fo=3.out
awk "{p-=1};/^\/[1-6]|^Отдел/{p=2};p>0" %fi% >%fo%
в начале скопированных строк прописывалось значение "999 " »
@echo off
SetLocal EnableDelayedExpansion
set fi=1.txt
set fo=1.out
(for /f "tokens=1 delims=:" %%i in ('findstr /brnc:"/[1-6]000" /c:"Отдел" "%fi%"') do (
set /a $j=%%i+1& for /f "tokens=1* delims=[]" %%a in (
'find /v /n ""^<"%fi%"^|findstr /bc:"[%%i]" /c:"[!$j!]"') do echo.999%%b
)) >"%fo%"
@echo off
set fi=2.txt
set fo=2.out
sed -n "/^\/[1-6]\|^Отдел/{s/^/999/p;n;s/^/999/p;}" "%fi%" >"%fo%"
@echo off
set fi=3.txt
set fo=3.out
awk "{p-=1};/^\/[1-6]|^Отдел/{p=2};p>0{print 999$0}" %fi% >%fo%
Seryoga204
26-09-2010, 20:42
amel27,
Спасибо большое все работает отлично!
Еще появилась необходимость отбирать допустим строки которые начинаются не на слово "Отдел", а на "Отдел*", как экранировать символ "*", пробывал "Отдел^*" не проходит?
Darkherald
10-01-2011, 09:19
Помогите пожалуйста нужен скрипт "Копирование строк в отдельный файл по условию"
Который должен в файле 1.txt находить слова из файла 2.txt и копировать всю строку в которой было найдено одно из слова из файла 2.txt и копировать подряд в файла 3.txt именно полными строками.
Пример: Имеется лог фаил в нем много хлама.
рараррра тиитилоп обращение тпопотаоптоа
обращение паолпоалпоатоавтм топтлвоатлмо
Скрипт должен посмотреть заданное слово из файла 2.txt например "обращение" и найти его в файле 1.txt и скопировать в файл 3.txt полностью строку
рараррра тиитилоп обращение тпопотаоптоа
обращение паолпоалпоатоавтм топтлвоатлмо
а не просто найденное слово "обращение"
Заранее спасибо, извините если не явно выразил суть проблемы.
в файле 1.txt находить слова из файла 2.txt и копировать всю строку в которой было найдено одно из слов »findstr /ig:2.txt 1.txt >3.txt
Darkherald
11-01-2011, 10:10
amel27 спасибо огромное то что нужно
AlexVong
12-04-2011, 21:22
Подскажите как подправить код
@echo off SetLocal EnableDelayedExpansion
set fi=1.txt
set fo=1.out
(for /f "tokens=1 delims=:" %%i in ('findstr /brnc:"000000" /c:"Отдел" "%fi%"') do
( set /a $j=%%i+1& for /f "tokens=1* delims=[]" %%a
in ( 'find /v /n ""^<"%fi%"^|findstr /bc:"[%%i]" /c:"[!$j!]"')
do echo.999%%b )) >"%fo%"
Чтобы по условию "000000" копировались строки которые начинаются на 000000, а по условию "Отдел" строка + 4 последующие за ней.
AlexVong
13-04-2011, 20:32
Подскажите пожалуйста.Или по первому и второму условию копировались помимо строки удовлетворяющей поиску 4 последующие строки. Заранее спасибо.
по условию "000000" копировались строки которые начинаются на 000000, а по условию "Отдел" строка + 4 последующие за ней »
set fi=1.txt
set fo=1.out
(for /f "delims=" %%a in ('type "%fi%"') do @(set "$a=%%a"
SETLOCAL EnableDelayedExpansion
if /i "!$a:~,6!"=="000000" set $p=1
if /i "!$a:~,5!"=="Отдел" set $p=5
if !$p! gtr 0 set /a "$p-=1"& echo/!$a!
for %%b in ("!$p!") do @ENDLOCAL& set $p=%%~b
))>"%fo%"
AlexVong
03-05-2011, 18:39
FindStr /BRC:"Текст" /C:"Текст2" *.* >2.txt
Подскажите как заставить FindStr работать с файлами в кодировке 1251?
Foreigner
03-05-2011, 19:55
Подскажите как заставить FindStr работать с файлами в кодировке 1251? »
Выставить нужную кодировку:
chcp 1251
FindStr /BRC:"Текст" /C:"Текст2" *.* >2.txt
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.