基于CSV中的值匹配文本文件中的行

时间:2017-02-08 16:10:16

标签: powershell powershell-v2.0 powershell-v3.0

大家好,

我在使用以下脚本时遇到问题。这是要求:

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"

2 个答案:

答案 0 :(得分:0)

我会以不同的方式处理这个问题。首先,您需要找到匹配项,如果有匹配项,则处理其他输出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"
}

答案 1 :(得分: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 } }        

  }