Я искал и пробовал различные вопросы и решения, которые размещены на этом сайте. Но у такого новичка, как я, нет ума для этого. Приведенный ниже код хорошо работает, если я добавлю одну строку. Как изменить переменную поиска, чтобы найти значение соответствия. Я хочу, чтобы он работал следующим образом: найдите службу GXNM AD в столбце 1 и распечатайте вывод в файл. И кто-нибудь может это объяснить.

Мой CSV (input.csv):

Application,RequesterID,Date,VerifierID
"GX AD Service,""9900232"",""10/09/2014 17:51"",""9909142"""
"GX AD Service,""9900249"",""10/09/2014 17:51"",""9909142"""
"GXNT AD Service,""9900232"",""10/09/2014 17:51"",""9909142"""
"GXNT AD Service,""9900249"",""10/09/2014 17:51"",""9909142"""
"GXNM - Others - (Reset Staffs),""99001730"",""11/09/2014 9:00"",""99090615"""

Моя пакетная программа:

@echo off
cls
setlocal enabledelayedexpansion

set /p header=<input.csv
echo %header%>output2.csv

set column=1
set search=GXNM AD Service
cls

for /f "skip=1 tokens=*" %%A in (output.csv) do (
    set inline=%%A

    for /f "tokens=1-4 delims=," %%1 in ("!inline!") do (
    set col1=%%1&set col2=%%2&set col3=%%3&set col4=%%$
    findstr /rx 
    if !col%column%! equ !search! echo !inline!>>output2.csv
  )
)

type output2.csv
set "cmd=findstr /R /N "^^" output2.csv | find /C ":""
for /f %%a in ('!cmd!') do set number=%%a
echo %number%

1 ответ1

0

Это похоже на боль работать. Вы можете использовать мой скрипт jgrep.bat для этого.

@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/

args = WScript.Arguments
match = args(0);
if(match=="-t") match=args(1).replace("'", "\"");
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

// stdout.WriteLine("Arguments: "+match);

var regex = new RegExp(match);

while(!stdin.AtEndOfStream) {
    var sLine = stdin.ReadLine();
    if(regex.test(sLine)) stdout.WriteLine(sLine);
}

Я бы посчитал это (в основном) самодокументированным, но если у вас есть конкретный вопрос по этому поводу, тогда задавайте. Просто поместите этот файл куда-нибудь по пути и запустите его так:

cat input.csv|jgrep.bat "(AD Service|GXNM)"

Это просто использует регулярное выражение для соответствия ваших строк. Выражение означает:

cat input.csv|jgrep.bat - Send the contents of input.csv to the jgrep.bat script.
(AD Service|GXNM) - Print only on lines which contain 'AD Service' or 'GXNM'.

Это так просто. О, да, если вы предпочитаете иметь заголовок и сохранить результаты в файл, то это все еще один слой:

echo Application,RequesterID,Date,VerifierID>output.txt & cat input.csv|jgrep.bat "(AD Service|GXNM)">>output.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .