解析csv比较未找到的txt文件和日志行

时间:2017-03-10 21:55:28

标签: powershell

作为我正在运行的脚本的延续,正在进行以下操作。

我有一个格式化信息的CSV文件,例如:

名为Import.csv的文件:

Name,email,x,y,z
\I\RS\T\Name1\c\x,email@jksjks,d,f
\I\RS\T\Name2\d\f,email@jsshjs,d,f
...

此文件很大。

我还有一个名为Note.txt的文件。

Name1
Name2
Name3
...

在@ mathias-r-jessen

的帮助下
$Dir = PathToFile
$import = Import-Csv $Dir\import.csv
$NoteFile = "$Dir\Note.txt"
$Note = GC $NoteFile

$Import |Where-Object {$Note -contains $_.Name.Split('\')[4]} |Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append

此代码快速,轻松地解析大csv并提取包含$ note文件中任何行的每一行。

我的下一个问题是如何记录$ note文件中csv文件中找不到的任何行。

我尝试了以下内容:

$result = $Import |Where-Object {$Note -contains $_.Name.Split('\')[4]} |Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append

$Note | Where-Object {$result.Name.Split('\')[4] -notcontains $Note} | out-file $dir\not-found.log -append

这似乎返回$ note中的每一行。

@ mathias-r-jessen您可以提供任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用Switch来执行此操作。

Switch($Import){
    {$Note -contains $_.Name.Split('\')[4]} {$_ | Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append; continue}
    default {$_ | Export-csv "$Dir\Not-Found.csv" -NoType -Append}
}

第一个选项中的continue使得如果第一个案例匹配则执行相关操作,然后继续下一个记录。如果第一种情况不匹配,则会转到默认操作,然后将其输出到另一个文件。

答案 1 :(得分:0)

我使用以下方法解决了这个问题:

$result = $Import |Where-Object {$Note -contains $_.Name.Split('\')[4]} 

$result | Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append

$matches =  $note | where-object { $result.Name -match $_}

compare-object $note $matches |where-object {$_.SideIndicator -like "<=" | select -ExpandProperty InputObject | Out-file "$Dir\Not_found.txt" -Append