得到许多列出了相同的输出使用PowerShell
问题描述:
我在ISE的蓝色部分显示此:得到许多列出了相同的输出使用PowerShell
Column1 Column2 Column3 Column4 ------- ------- ------- ------- infra-98 infra-852 infra-44 infra-99 infra-62 infra-85 infra-8 infra-23 infra-8 infra-852 infra-10 infra-55 infra-70 Column1 Column2 Column3 Column4 ------- ------- ------- ------- infra-1 infra-85 infra-2 infra-99 infra-98 infra-55 infra-44 infra-23 infra-2 infra-1 infra-10 infra-62 infra-70
csv文件(EXCEL表)(注:星星是匹配的细胞:
Column1 Column2 Column3 Column4 *infra-1* infra-85 *infra-2* infra-99 infra-98 infra-85 infra-44 infra-23 *infra-5* infra-8 *infra-1* infra-10 *infra-2* infra-55 infra-8 infra-70 infra-62 *infra-5* infra-852 *infra-5* *infra-6* *infra-6* infra-853 *infra-6*
首先,有四个列表显示与Column1不匹配的单元格,然后在第二个列表中我们对Column2有相同的事情,问题是我不知道该怎么做。人们告诉我这是可行的,但很复杂,是否有另外的选择来创建这个?
当前代码允许以除去未与第一列匹配细胞:
$csv = Import-Csv .\test1.csv -Delimiter ';'
$ref = @($csv.Column1)
foreach ($row in $csv) {
foreach ($col in 'Column2', 'Column3', 'Column4') {
if ($ref -contains $row.$col) { $row.$col = '' }
}
}
$csv | Select-Object Column1,Column2,Column3,Column4
答
生成4个独立的阵列,每列一个,然后加入:
$csv = Import-Csv .\1.csv -Delimiter ';'
$ref = [ordered]@{}
$columns = foreach ($i in 0..3) { ,[Collections.ArrayList]@() }
foreach ($row in $csv) {
$value = $row.Column1
$ref[$value] = $true
$columns[0].add($value) >$null
}
foreach ($row in $csv) {
$i = 1
foreach ($col in 'Column2', 'Column3', 'Column4') {
$value = $row.$col
if (!$ref[$value]) {
$columns[$i].add($value) >$null
}
$i++
}
}
$maxLine = ($columns | select -expand Count | measure -Maximum).Maximum - 1
$csv = foreach ($i in 0..$maxLine) {
[PSCustomObject]@{
Column1 = $columns[0][$i]
Column2 = $columns[1][$i]
Column3 = $columns[2][$i]
Column4 = $columns[3][$i]
}
}
这是一个通用的例子,所以你可能需要调整它。
我只想在那里有输出,但我目前的代码是不是这个,我不知道该做什么2个表必须在同一个输出 – charlo
是的,因为我不知道应该是什么我确实能够显示预期的输出。我只是想通过各种手段来获得这个输出。我试图在问题中解释它 – charlo
它在[上一个问题](https://stackoverflow.com/questions/44633430/display-only-the-columns-needed-powershell)中花了很多评论来理解charlo想要改变每个单独栏目中的条目,以便不再有空白。 – LotPings