如何在powershell中基于共享值组合.csv中的字段?

时间:2016-03-18 14:47:47

标签: csv powershell

我有两个格式相同的文件,一个包含目标IP地址和URL,另一个只包含目标IP地址。我正在尝试编写一个powershell脚本,以便在目标IP地址相等的情况下将第一个文件中的URL字段添加到该行的第二个文件中。以下是两个文件的示例:

包含网址的文件:

Date;Time;Source;Destination;Port;User;URL
3/7/2016;0:00:07;168.254.25.6;10.0.1.27;80;jsmith;abcnet

将网址添加到的文件:

Date;Time;Source;Destination;Port;User;URL
3/7/2016;0:00:09;168.254.25.6;10.0.1.27;80;;

每当我运行下面的代码时,它似乎陷入无限循环,因为它没有运行完成,但它不会抛出任何错误。我的数据集长达数千行,但是当我用一个只有几行的样本集进行测试时它就可以工作。

$noURLs = Import-Csv C:\Path\to\noURLs.csv
$containsURLs = Import-Csv C:\Path\to\containsURLs.csv | Select-Object Destination, URL
$outputFile = "C:\Path\to\output.csv"

if(Test-Path $outputFile){
    Remove-Item $outputFile
}

foreach($line in $noURLs){
    $cpDest = $line.Destination
    $destURL = $containsURLs | Where-Object {$_.Destination -eq $cpDest} | Select-Object -ExpandProperty URL | Select-Object -Unique


    if($destURL -ne $null){
        if( $destURL.Count -gt 1) {
            $destURL = $destURL -join ';'
        }
    }
    $line.URL = $destURL
}

$noURLs | Export-Csv $outputFile

1 个答案:

答案 0 :(得分:0)

我忘了在我的select对象中添加一个非唯一的开关,所以对于第一个csv中的每一条记录,它都循环遍历第二个csv的每一行。固定代码如下所示:

$ noURLs = Import-Csv C:\ Path \ to \ noURLs.csv $ containsURLs = Import-Csv C:\ Path \ to \ containsURLs.csv | Select-Object -Unique Destination,URL $ outputFile =“C:\ Path \ to \ _ output.csv”

if(Test-Path $ outputFile){     Remove-Item $ outputFile }

foreach($ line in $ noURLs){     $ cpDest = $ line.Destination     $ destURL = $ containsURLs | Where-Object {$ _。Destination -eq $ cpDest} | Select-Object -ExpandProperty URL | Select-Object -Unique

if($destURL -ne $null){
    if( $destURL.Count -gt 1) {
        $destURL = $destURL -join ';'
    }
}
$line.URL = $destURL

}

$ noURLs | Export-Csv $ outputFile -NoTypeInformation