Powershell找到不同数量的数组的常见字符串

时间:2015-06-02 18:59:12

标签: arrays powershell intersection

问题是Powershell find common string in multiple files

的后续行动

关注PowerShell代码

  1. 通过目录

  2. 为每个文件提取IP地址并存储在多维数组中$match

  3. 迭代后,遍历多维数组中的每个元素并按空格分割,并存储到另一个多维数组$j
  4. 我能够找到$j[0]$j[1]之间的交集,但我不知道如何在$j的所有元素上迭代地执行此操作地址数组。

    参见代码

    $i = $NULL
    $match = @()
    $j = @()
    $input_path = $NULL
    $output_file = "D:\Script\COMMON.TXT"
    
    $directory = "D:\Script\Files"
    $regex = ‘\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b’
    
    Get-ChildItem $directory | ForEach-Object{
    
        $input_path = $directory + "\" + $_.Name
        write-host $input_path
        $match += ,@(select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value })
    }
    
    
    
    foreach ($i in $match){
        $j += ,@($i.split(" "))
    }
    
    $j[0] | sort | select -Unique | where {$j[1] -contains $_} | select -Unique > $output_file
    

1 个答案:

答案 0 :(得分:1)

这很容易。你说你有二维数组$j,并希望找到$j所有元素中存在的所有字符串。您可以在$j[0]之外创建一个临时的“总交叉点”数组,然后在$j上运行foreach并在该临时值中创建一个交集。最后它只包含所有列包含的那些元素。

# $j is two-dimensional, and has unique elements
$t=$j[0]
$j | % {
    $i=$_ #rename to avoid confusion
    if ($i -ne $j[0]) { $t = $t|where {$i -contains $_}}
}
# $t now has your intersection