Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] узнать слово имя которого известно на паловину

Ответить
Настройки темы
CMD/BAT - [решено] узнать слово имя которого известно на паловину

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 12:49, 06-01-2015

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата Ирина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! С Рождеством!

Отправлено: 18:24, 06-01-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Georgio, ой спасибо мальчики
Цитата Georgio:
привет от ComSpec и Georgio! С Рождеством! »
нифига себе ему тоже привет чет потерялся он

Отправлено: 10:54, 08-01-2015 | #3


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 слов искал и все.. и записывал их в лог

Отправлено: 20:47, 09-01-2015 | #4


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Ирина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 можно взять здесь

Отправлено: 22:31, 09-01-2015 | #5


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 23:18, 09-01-2015 | #6


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата Ирина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

Последний раз редактировалось Foreigner, 10-01-2015 в 15:51.


Отправлено: 12:39, 10-01-2015 | #7


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 слов и все и записывал в лог
спасибо.

Отправлено: 20:12, 10-01-2015 | #8


Аватара для yurfed

Ветеран


Сообщения: 20046
Благодарности: 3123

Профиль | Отправить PM | Цитировать


Цитата Ирина1986:
узнать слово имя которого известно на паловину »
на паловину будет сложней.

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 20:34, 10-01-2015 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Ирина1986:
просто там столько много ссылок что я не смогла разобраться что скачивать »
sed for windows - Поиск в Googlesed for Windows или GnuWin - Browse /sed/4.2.1 at SourceForge.net → и то, и другое приводят к sed-4.2.1-setup.exe.

Отправлено: 20:42, 10-01-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] узнать слово имя которого известно на паловину

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление msi приложения когда GUID не известен, а известно имя приложения Anton04 Скриптовые языки администрирования Windows 4 22-07-2014 09:20
[решено] Подскажите, как узнать e-mail, с которого идут жалобы Madoleg Вебмастеру 10 21-10-2011 11:15
Стало известно кодовое имя Ubuntu 11.10 OSZone News Новости информационных технологий 4 11-03-2011 21:32
[решено] Узнать имя пользователя, от которого запущен процесс vitalisvv AutoIt 4 16-09-2009 01:16
[решено] Получить имя диска, с которого запущен скрипт frostyland AutoIt 2 18-08-2009 10:11




 
Переход