Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Копирование строк в отдельный файл по условию (http://forum.oszone.net/showthread.php?t=183771)

Seryoga204 24-08-2010 23:20 1481036

Копирование строк в отдельный файл по условию
 
Ув. форумчане подскажите пожалуйста, как можно скопировать из файла (С:\1.txt)- все строки которые начинаются на:
/1000
/2000
/3000
/4000
/5000
/6000
, в файл 2.txt ?

deepred 25-08-2010 00:21 1481071

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 1481087

Спасибо большое все отлично работает, только батник :teeth: не завершает работу, а по кругу отбирает записи?

deepred 25-08-2010 01:08 1481095

Seryoga204,

почему не завершает? Сколько там у Вас записей с подобным критерием отбора?
Цитата:

Цитата deepred
goto :Eof »

- там не просто так...

Seryoga204 25-08-2010 01:28 1481102

Все получилось! Спасибо!

amel27 25-08-2010 02:59 1481123

Код:

FindStr /BRC:"/[1-6]000" 1.txt >2.txt

Seryoga204 25-08-2010 03:31 1481130

amel27,Спасибо! а если еще надо строки которые начинаются со слова "Отдел", так чтобы в файле 2.txt сохранилась последовательность?

amel27 25-08-2010 08:24 1481159

Вложений: 1
Цитата:

Цитата Seryoga204
еще надо строки которые начинаются со слова "Отдел" »

зависит от исходной кодировки текстового файла, для DOS (OEM/866) всё просто:
Код:

FindStr /BRC:"/[1-6]000" /C:"Отдел" 1.txt >2.txt
для WIN (ANSI/1251) требуется промежуточная перекодировка во временный файл, типа:
(см. аттач, спецсимволы не дали корректно запостить код)

...либо вместо штатной FINDSTR использовать альтернативы типа GREP

Seryoga204 26-09-2010 10:11 1504497

Цитата:

FindStr /BRC:"/[1-6]000" /C:"Отдел" 1.txt >2.txt
А можно сделать так:
чтобы также копировалась следующая строка идущая после строки удовлетворяющей условию?
и в файле 2.txt в начале скопированных строк прописывалось значение "999 "?

amel27 26-09-2010 16:45 1504828

Цитата:

Цитата Seryoga204
чтобы также копировалась следующая строка идущая после строки удовлетворяющей условию »

штатными средствами непросто, как вариант (текстовый файл в 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%


amel27 26-09-2010 17:03 1504840

Цитата:

Цитата Seryoga204
в начале скопированных строк прописывалось значение "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 1505046

amel27,
Спасибо большое все работает отлично!
Еще появилась необходимость отбирать допустим строки которые начинаются не на слово "Отдел", а на "Отдел*", как экранировать символ "*", пробЫвал "Отдел^*" не проходит?

Darkherald 10-01-2011 09:19 1585050

Помогите пожалуйста нужен скрипт "Копирование строк в отдельный файл по условию"

Который должен в файле 1.txt находить слова из файла 2.txt и копировать всю строку в которой было найдено одно из слова из файла 2.txt и копировать подряд в файла 3.txt именно полными строками.
Пример: Имеется лог фаил в нем много хлама.

рараррра тиитилоп обращение тпопотаоптоа
обращение паолпоалпоатоавтм топтлвоатлмо

Скрипт должен посмотреть заданное слово из файла 2.txt например "обращение" и найти его в файле 1.txt и скопировать в файл 3.txt полностью строку

рараррра тиитилоп обращение тпопотаоптоа
обращение паолпоалпоатоавтм топтлвоатлмо

а не просто найденное слово "обращение"

Заранее спасибо, извините если не явно выразил суть проблемы.

amel27 11-01-2011 04:56 1585824

Цитата:

Цитата Darkherald
в файле 1.txt находить слова из файла 2.txt и копировать всю строку в которой было найдено одно из слов »

Код:

findstr /ig:2.txt 1.txt >3.txt

Darkherald 11-01-2011 10:10 1585916

amel27 спасибо огромное то что нужно

AlexVong 12-04-2011 21:22 1656783

Подскажите как подправить код
Код:

@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 1657598

Подскажите пожалуйста.Или по первому и второму условию копировались помимо строки удовлетворяющей поиску 4 последующие строки. Заранее спасибо.

amel27 14-04-2011 06:53 1657873

Цитата:

Цитата AlexVong
по условию "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 1669674

Код:

FindStr /BRC:"Текст" /C:"Текст2" *.* >2.txt
Подскажите как заставить FindStr работать с файлами в кодировке 1251?

Foreigner 03-05-2011 19:55 1669726

Цитата:

Цитата AlexVong
Подскажите как заставить FindStr работать с файлами в кодировке 1251? »

Выставить нужную кодировку:
Код:

chcp 1251
FindStr /BRC:"Текст" /C:"Текст2" *.* >2.txt


AlexVong 03-05-2011 21:06 1669756

Foreigner,
Не помогает, не chcp 1251 не chcp 1251>nul
Приходится все файлы перекодировать вручную в кодировку 866, только тогда батник срабатывает нормально.

Foreigner 03-05-2011 21:21 1669764

Цитата:

Цитата AlexVong
Не помогает, не chcp 1251 не chcp 1251>nul
Приходится все файлы перекодировать вручную в кодировку 866, только тогда батник срабатывает нормально. »

А сам батник в какой кодировке? Сохрани его в 1251. Мне кажется проще в одном файле поменять кодировку :))

AlexVong 03-05-2011 21:48 1669774

Foreigner,
Батник есть и в 1251 и в 866, результат тот же :cry:

Foreigner 03-05-2011 22:10 1669787

AlexVong,
Давай разбираться.
1. Создал 1.txt в 1251 с текстом:
Код:

тест
2. Создал батник в 1251:
Код:

@echo off
findstr "тест" 1.txt

3. В консоли 866
4. Выполнил -- результат положительный:
Код:

> 111
ЄхёЄ

>


JohnikE 25-01-2013 10:35 2074599

Уважаемы форумчане!
Подскажите как сделать поиск в файле .txt определенного слова и строки с с данным словом копировать в отдельный файл.
Спасибо!

Iska 25-01-2013 10:59 2074621

Код:

find.exe /?
Код:

findstr.exe /?

al29 24-08-2016 23:33 2662946

Уважаемые форумчане! Помогите как же выделить строки содержащие определённый текст в середине строки (не в начале) + ещё одну последующую и отправить в другой файл.

данный код
Код:

@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%"

почему то возвращает пустой файл. кодировка файла DOS


Время: 05:46.

Время: 05:46.
© OSzone.net 2001-2025