我无法排除未在我的表格中显示的单元格。以下脚本允许显示不在ComputerName列中的值,如果单元格匹配,则结果中不会显示这些值。 / p>
脚本:
$csv = Import-Csv .\test1.csv -Delimiter ';'
$ref = @($csv.ComputerName)
foreach ($row in $csv) {
foreach ($col in 'OtherComputerName', 'OtherComputer', 'AndAgain') {
if ($ref -contains $row.$col) { $row.$col = '' }
}
}
$csv | Select-Object * -ExcludeProperty ComputerName |Format-Table -auto
文件:
ComputerName OtherComputerName OtherComputer AndAgain
infra-1 infra-852 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
结果:
OtherComputerName OtherComputer AndAgain
----------------- ------------- --------
infra-852 infra-99
infra-85 infra-44 infra-23
infra-8 infra-10
infra-55 infra-8 infra-70
infra-852
我想排除空单元格,但我不知道这些值是否存在但是没有显示,有人可以帮我吗?
预期结果:
OtherComputerName OtherComputer AndAgain
----------------- ------------- --------
infra-852 infra-44 infra-99
infra-85 infra-8 infra-23
infra-8 infra-852 infra-10
infra-55 infra-70
答案 0 :(得分:1)
你想要什么是可能的,但我不推荐它。在您的代码中,您有行和列。这个想法是沿着一行的数据是相关的。
在您的数据中,您处于几个不同的列之后,其中数据与行无关。所以基本上你是在3个不同的列表之后,而不是表格。
我建议您创建不同的结果列表。有很多方法可以做到这一点;我通过创建一个具有列标题名称的变量来完成它。
之后,如果您愿意,可以手动将值显示为表格。
输入 - test1.csv
ComputerName;OtherComputerName;OtherComputer;AndAgain
infra-1;infra-852;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
<强>代码:强>
$csv = Import-Csv .\test1.csv -Delimiter ';'
$ref = @($csv.ComputerName)
# get csv headers; exclude computername
$myheaders = ($csv | Get-Member | Where-Object {$_.MemberType -eq "NoteProperty" -and $_.Name -ne "ComputerName"}).Name
$j = 0 # a counter
foreach ($col in $myheaders){
# create a new variable that has the name of the column, and the value
# that you are after (in column but not in $ref)
New-Variable -Name $col -Value ($csv.$col | Where-Object {$_ -notin $ref})
$k++
if($k -gt $j){$j++} # get the longest column
}
# output formatted text, with left justified test that is 20 characters long.
# 0,1 and 2 are indexes that refer to the values after -f
"{0,-20}{1,-20}{2,-20}" -f "OtherComputerName","OtherComputer","AndAgain"
foreach($i in 0..$j){
"{0,-20}{1,-20}{2,-20}" -f $OtherComputerName[$i],$OtherComputer[$i],$AndAgain[$i]
}
<强>输出:强>
OtherComputerName OtherComputer AndAgain
infra-852 infra-44 infra-99
infra-85 infra-8 infra-23
infra-8 infra-852 infra-10
infra-55 infra-70