Компьютерный форум 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=293551)

Ирина1986 06-01-2015 12:49 2452571

узнать слово имя которого известно на паловину
 
Здравствуйте . можно ли написать такой bat например в файле 1.txt есть много много слов и строк.. как мне найти слова имя которых известно на половину и результат записать в файл txt в столбик.
и второй вопрос есть файл 1.txt в нем много много много строк как оставить только 50 строк а остальные строки удалить и все записать в log.txt
Спасибо.

Georgio 06-01-2015 18:24 2452705

Цитата:

Цитата Ирина1986
можно ли написать такой bat например в файле 1.txt есть много много слов и строк.. как мне найти слова имя которых известно на половину и результат записать в файл txt в столбик. »




Ирина1986, определения понятия "слово" отличаются в лингвистике и информатике. Если для простоты принять за слово последовательный набор символов в тексте, разделённый символами пробела, табуляции и перехода на новую строку, то в рамках создания "чистого" пакетного файла не существует ничего лучше решений такого типа:


Код:

@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "\<первая_половина_слова"') do @(
 for %%j in (%%i) do @(
  for /f %%k in ('echo "%%j"^| findstr /ir "^\"первая_половина_слова.*\""') do @(
  echo %%~k
  )
  )
 )
)

;

Код:

@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @(
 for %%j in (%%i) do @(
  for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @(
  echo %%~k
  )
  )
 )
)

.



Этот метод имеет много недостатков:
1) в тексте не должно быть кавычек;
2) символы
Цитата:

,
,
Цитата:

;
,
Цитата:

=
будут разделять "слово" на несколько "слов";
3) "слова", содержащие символы
Цитата:

*
и
Цитата:

?
,
будут проигнорированы;
4) специальные символы в шаблоне поиска должны экранироваться символом
Цитата:

\
;
5) могут встретиться и другие нюансы.





Цитата:

Цитата Ирина1986
и второй вопрос есть файл 1.txt в нем много много много строк как оставить только 50 строк а остальные строки удалить и все записать в log.txt »




Код:

@<"1.txt">"log.txt" (
for /l %%i in (1 1 50) do @(
 set/p x=
 if defined x (cmd/v/c echo.!x!) else (echo.)
 set x=
 )
)





Ирина1986, привет от ComSpec и Georgio! С Рождеством!

Ирина1986 08-01-2015 10:54 2453304

Georgio, ой спасибо мальчики
Цитата:

Цитата Georgio
привет от ComSpec и Georgio! С Рождеством! »

нифига себе ему тоже привет чет потерялся он

Ирина1986 09-01-2015 20:47 2453904

Georgio,
Цитата:

Цитата Georgio
@<"1.txt">"1.log" ( for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @( for %%j in (%%i) do @( for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @( echo %%~k ) ) ) ) »

ужас так долго ищет....а как дополнить этот код что бы только 50 слов искал и все.. и записывал их в лог

Foreigner 09-01-2015 22:31 2453955

Ирина1986, Лучше воспользоваться специально написанными для работы с текстом утилитами. Например с помощью sed. Допустим надо найти все "сло..." и "...во" в 1.txt и все совпадения записать в 2.txt
Код:

@echo off
1>nul chcp 1251

sed -r "s/\s|\.|,/\n\r/g" 1.txt | sed -nr "/\bсло.+|.+во\b/p" > 2.txt

sed можно взять здесь

Ирина1986 09-01-2015 23:18 2453967

Foreigner, спасибо конечно но так не пойдет.

мне надо так как я постом выше написала

Foreigner 10-01-2015 12:39 2454076

Цитата:

Цитата Ирина1986
но так не пойдет »

Не подходит sed (он работает гораздо быстрее батника) или надо первые 50 вхождений? Вот первые 50:
Код:

@echo off
1>nul chcp 1251

sed -r "s/\s|\.|,/\n/g" 1.txt | sed -nr "/\bсло.+|.+во\b/p" | sed "50q" > 2.txt


Ирина1986 10-01-2015 20:12 2454230

Foreigner, sed не подойдет а может и подойдет просто там столько много ссылок что я не смогла разобраться что скачивать если не трудно дайте прямую ссылку на этот sed

а можно с этим кодом
Код:

@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @(
 for %%j in (%%i) do @(
  for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @(
  echo %%~k
  )
  )
 )
)

чтобы находил 50 слов и все и записывал в лог
спасибо.

yurfed 10-01-2015 20:34 2454233

Цитата:

Цитата Ирина1986
узнать слово имя которого известно на паловину »

на паловину будет сложней.

Iska 10-01-2015 20:42 2454236

Цитата:

Цитата Ирина1986
просто там столько много ссылок что я не смогла разобраться что скачивать »

sed for windows - Поиск в Googlesed for Windows или GnuWin - Browse /sed/4.2.1 at SourceForge.net → и то, и другое приводят к sed-4.2.1-setup.exe.

Ирина1986 10-01-2015 21:01 2454245

Iska, sed надо еще и устанавливать а нам на работе администратор не разрешает ничего устанавливать.

Iska 10-01-2015 21:57 2454267

Ирина1986, тогда возьмите
архив: sed-4.2.1-bin.zip и три необходимых библиотеки к исполняемому файлу «sed.exe»: dependencies zip file.

Цитата:

Цитата Ирина1986
администратор не разрешает ничего устанавливать. »

И это правильно.

Ирина1986 10-01-2015 22:20 2454274

Iska,
Цитата:

Цитата Iska
три необходимых библиотеки к исполняемому файлу «sed.exe»: dependencies zip file. »

вот это я нашла три библиотеки
Цитата:

Цитата Iska
архив: sed-4.2.1-bin.zip »

а в архиве так много папок я не нашла sed.exe
я что такая глупая но я ведь не глупая я действительно искала

Iska 11-01-2015 08:46 2454361

Цитата:

Цитата Ирина1986
а в архиве так много папок я не нашла sed.exe »

«sed.exe» расположен в архиве «sed-4.2.1-bin.zip» внутри папки «bin».

Ирина1986 11-01-2015 11:00 2454392

Iska, спасибо тебе за терпение разобралась но теперь возникают вопросы вот этот код
Код:

@echo off
1>nul chcp 1251

sed -r "s/\s|\.|,/\n\r/g" 1.txt | sed -nr "/\bсло.+|.+во\b/p" > 2.txt

все нормально ищет но если в слове идет точка он почему то не ищет

Iska 11-01-2015 11:09 2454393

Ирина1986, это коллеги Foreigner и Georgio придут, посмотрят — я с sed не работаю. Но сразу поясните, что в Вашем понимании есть:
Цитата:

Цитата Ирина1986
в слове идет точка »

Можно на примерах. Ибо, насколько я понимаю, например, «ма.ма» — это уже будет не слово, а два слова, разделённых точкой.

Foreigner 11-01-2015 11:11 2454394

Цитата:

Цитата Ирина1986
все нормально ищет но если в слове идет точка он почему то не ищет »

Всегда считал, что точки, запятые и пробелы не являются частью слова. Приведите пример условия для поиска.

Ирина1986 11-01-2015 11:32 2454400

Foreigner,
вот все ищет переделайте этот вариант под мои нужды чтобы находил 50 слов и все ...и записывал в лог
Код:

@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @(
 for %%j in (%%i) do @(
  for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @(
  echo %%~k
  )
  )
 )
)


Ирина1986 11-01-2015 15:14 2454516

никто не переделает такой сложный код?

Iska 11-01-2015 16:18 2454554

Ирина1986, Вы не отвечаете на заданные вопросы. В итоге это выглядит так: «сделать, как я хочу, хотя я и сам не знаю, чего я хочу».

Ирина1986 11-01-2015 17:10 2454581

тема закрыта
спасибо всем


Время: 03:14.

Время: 03:14.
© OSzone.net 2001-