2017-02-08 3 views
0

Привет всем,согласующие линии в текстовом файле на основе значений в CSV

У меня возникли проблемы с ниже сценария. Вот требование:

1) Каждый текстовый файл необходимо сравнить с одним CSV-файлом. Файл CSV содержит данные, которые должны присутствовать в текстовом файле.

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

3) Если текстовый файл не имеет аналогов в файл CSV, выход с 0, поскольку никакие матчи не найденный.

Я попытался сделать это, но в итоге у меня есть совпадения, а также не совпадения. Что мне действительно нужно, чтобы соответствовать линии, выполнения заданий, выход, если текстовый файл не имеет аналогов, а затем вернуться 0

$CSVFIL = Import-Csv -Path $DRIVE\test\csvfile.csv 
$TEXTFIL = Get-Content -Path "$TEXTFILFOL\*.txt" | 
    Select-String -Pattern 'PAT1' | 
    Select-String -Pattern 'PAT2' | 
     Select-String -Pattern 'TEST' 

ForEach ($line in $CSVFIL) { 

If ($TEXTFIL -match $line.COL1) { 

Write-Host 'RUNNING:' ($line.JOB01) 

} else { 

write-host "No Matches Found Exiting" 

ответ

0

Я бы справиться с этим по-другому. Прежде всего, необходимо найти спички, если есть результаты, то процесс-то еще OUTPUT 0.

$matches = @() 

foreach ($line in $CSVFIL) 
{ 
    if ($TEXTFIL -contains $line.COL1) 
    { $matches += $line } 
} 

if ($matches.Count -gt 0) 
{ 
    $matches | Foreach-Object { 
     Write-Output "Running: $($_.JOB01)" 
    } 
} 
else 
{ 
    Write-Output "No matches found, exiting" 
} 
+0

Спасибо за это, я хотел бы добавить некоторые дополнительные критерии в соответствии с файлом CSV, такие как -contains $ линии .COL1-и $ CD1 -match $ line.COL2 – RYU1

+0

Компаратор '-match' должен использовать Regex, если COL2 не содержит оператор Regex, который вы не получите, чего вы ожидаете. Как вы хотите сравнить его? Также хотел бы поблагодарить вас за то, что вы натолкнули меня на 1000 rep = D –

+0

Счастливый, чтобы наткнуть вас на 1000 :) Я хочу сравнить дополнительные текстовые поля. -match $ env.computername. Это сужает список на машине, на которой я нахожусь, поскольку мы будем запускать это на нескольких других машинах. – RYU1

0
$CSVFIL = Import-Csv -Path "$DRIVE\test\csvfile.csv" 
Get-Content -Path "$TEXTFILFOL\*.txt" | 
where {$_ -like "*PAT1*" -and $_ -like "*PAT2*" -and $_ -like "*TEST*" } | 
    %{ 
    $TEXTFOUNDED=$_; $CSVFIL | where {$TEXTFOUNDED -match $_.COL1} | 
    %{ [pscustomobject]@{Job=$_.JOB01;TextFounded=$TEXTFOUNDED;Col=$_.COL1 } }   

    } 
Смежные вопросы