Пакетная фильтрация совпадающих строк в файле для вывода - PullRequest
0 голосов
/ 15 апреля 2020

Привет, скрипт, который не работает, как показано ниже,


@echo off
setlocal EnableDelayedExpansion
echo.
echo.
echo.
(for /F "delims=" %%a in (find.txt) do (
   set "in=%%a"
   for %%v in (INT CHAR) do if "!in:*%%v=%%v!" neq "!in!" set "out=!in:*%%v=%%v!"
   echo !out!
)) > D:\test\TGT.txt

Каждая строка заканчивается строкой, например: abc или abc_01 / DEF или DEF_02 et c

Пожалуйста, сообщите о сценарии, который будет захватывать и печатать только строки, начинающиеся с INT или CHAR, а последняя строка не имеет _01 или _02 в конце. Здесь _ (подчеркивание) - это ключ для идентификации и игнорирования линии.

source.txt

INT SDFF 9784 abc
INT SDFF 098 abc_01
INT SDFF 9784 abc_02
ABC INT SDFF 098 abc_03
CHAR SDFF 9784 xyz
CHAR SDFF 098 XYZ_02
INT jkdf 981 DEF

out.txt (ожидаемый результат)

INT SDFF 9784 abc
CHAR SDFF 9784 xyz
INT jkdf 981 DEF

1 Ответ

0 голосов
/ 15 апреля 2020

Простое решение для этой задачи фильтрации строк:

%SystemRoot%\System32\findstr.exe /B /R "CHAR\> INT\>" "source.txt" | %SystemRoot%\System32\findstr.exe /R /V "_[0123456789][0123456789]*$" >"out.txt"

Первый FINDSTR поиск с чувствительным к регистру r egular выражением в файле source.txt для строк b , начинающихся либо со слова CHAR, либо со слова INT. Строка, начинающаяся, например, с CHARACTER или INT32, игнорируется первой FINDSTR .

Примечание: Пробел в строке поиска, заключенный в " без /C: слева от строки поиска интерпретируется как логический ИЛИ .

Найденные строки перенаправляются с | в качестве ввода для второго FINDSTR .

Второй FINDSTR выполняет поиск с учетом регистра r egular выражение для строк, заканчивающихся подчеркиванием и одной или несколькими цифрами, и выводит результат с ошибкой v , который означает, что все строки NOT заканчиваются подчеркиванием и одной или больше цифр.

Примечание: Можно также использовать [0-9] вместо [0123456789], но [0-9] также включает в себя три символа ¹²³.

Вывод второго FINDSTR перенаправляется с помощью > в файл out.txt.

Откройте командную строку , запустите findstr /? и прочитайте вывод Справка для получения более подробной информации об используемых опциях и регулярных выражениях.

См. также статью Microsoft о Использование операторов перенаправления команд для объяснения операторов перенаправления | и >.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...