问题是Powershell find common string in multiple files
的后续行动关注PowerShell代码
通过目录
为每个文件提取IP地址并存储在多维数组中$match
$j
我能够找到$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
答案 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