循环通过csv将内容与数组进行比较,然后将内容添加到csv

时间:2014-11-13 08:33:25

标签: powershell powershell-v3.0

我不知道如何将字符串附加到CSV。我在做什么: 我有两个csv文件。一个包含主机名和ID列表,另一个包含主机名和一些数字列表。 示例文件1: 主机名| ID
IWBW140004 | 3673234
IWBW130023 | 2335934
IWBW120065 | 1350213

示例文件2:
ServiceCode |主机名| ID
4 | IWBW120065 |
4 | IWBW140004 |
4 | IWBW130023 |

现在我在二维数组中读取文件1的内容:

$pcMatrix = @(,@())
Import-Csv $outputFile |ForEach-Object {
    foreach($property in $_.PSObject.Properties){
        $pcMatrix += ,($property.Value.Split(";")[1],$property.Value.Split(";")[2])
    }
}

然后我阅读文件2的内容并将其与我的数组进行比较:

Import-Csv $Group".csv" | ForEach-Object {
    foreach($property in $_.PSObject.Properties){
        for($i = 0; $i -lt $pcMatrix.Length; $i++){
            if($pcMatrix[$i][0] -eq $property.Value.Split('"')[1]){
                #Add-Content here
            }
        }
    }
}

我需要做什么,将$ pcMatrix [$ i] [1]附加到行ID中文件2中的活动列?

感谢您的建议。

Yanick

1 个答案:

答案 0 :(得分:3)

您似乎过于复杂化了一项非常简单的任务。

如果我理解正确,您希望填充文件2中的ID列,其ID与文件1中的正确主机名相对应。最简单的方法是填充第一个文件中的所有值进入HashTable并使用它来查找第二个文件中每行的ID:

# Read the first file and populate the HashTable:
$File1 = Import-Csv .\file1.txt -Delimiter "|"
$LookupTable = @{}
$File1 |ForEach-Object {
    $LookupTable[$_.Hostname] = $_.ID
}

# Now read the second file and update the ID values:
$File2 = Import-Csv .\file2.txt -Delimiter "|"
$File2 |ForEach-Object {
    $_.ID = $LookupTable[$_.Hostname]
}

# Then write the updated rows back to a new CSV file:
$File2 | Export-CSV -Path .\file3.txt -NoTypeInformation -Delimiter "|"