匹配文件到数组的值并提取其他数组列数据powershell

时间:2018-04-16 14:50:26

标签: arrays powershell

我有一个包含作业列表的文件。我需要在foreach循环中运行该文件,并且我需要在数组的第一列中查找每个值,然后检查第3列中的值,如果是N,则输出作业名。

到目前为止,我有,

$header = 1..4 | ForEach-Object { "h$_" }
$data = Get-Content F:\temp\Connect_Project\connect_jobs.txt

$data2 = "F:\temp\Connect_Project\alljobs.csv" | 
Import-Csv -Delimiter ',' -Header $header 
$stream = [System.IO.StreamWriter]     "F:\temp\Connect_Project\jobs_to_change.txt"
foreach ( $line in $data ) {  
    if ( $data2.h1 -match $line ) {
        if ( $data2.h3 -match 'N' ) {
        $stream.WriteLine($line)
    }}}
$stream.Close()

我知道这不起作用(虽然它正在删除阵列中不存在的作业)但我正在努力找出解决方法。

有人可以帮忙吗?

根据评论进行更新

我也试过

$header = 1..4 | ForEach-Object { "h$_" }
$data = Get-Content F:\temp\Connect_Project\connect_jobs.txt

$data2 = "F:\temp\Connect_Project\alljobs.csv" | 
    Import-Csv -Delimiter ',' -Header $header 

$stream = [System.IO.StreamWriter] "F:\temp\Connect_Project\jobs_to_change.txt"
foreach ( $line in $data ) {
$state = ($data2 | Where-Object {$_.h1 -match $file} | Select-Object h3)c
$line
$state
if ( $state = 'N') {
    $stream.WriteLine($line)
    }}
$stream.Close()

我可以看到我匹配h1,但我得到的所有h3值不仅仅是我想要的值。

1 个答案:

答案 0 :(得分:1)

一旦我发现它就很明显了。感谢EBGreen提供了对象提示。第二个版本工作一旦我意识到我将$ file放入比赛而不是$ line。将其更正为$ line,它正在做我想要的。

$header = 1..4 | ForEach-Object { "h$_" }

$data = Get-Content F:\temp\Connect_Project\connect_jobs.txt

$data2 = "F:\temp\Connect_Project\alljobs.csv" | 
    Import-Csv -Delimiter ',' -Header $header 

$stream = [System.IO.StreamWriter] "F:\temp\Connect_Project\jobs_to_change.txt"

foreach ( $line in $data ) {

    $state = $data2 | Where-Object {$_.h1 -match $line} | Select-Object h3

    if ( $state -match 'N') {
    $stream.WriteLine($line)
    }}


$stream.Close()