排除非'的单元格;t使用Powershell显示
我无法排除表中未显示的单元格。以下脚本允许显示ComputerName列中未显示的值,如果单元格与结果中未显示的值相匹配,则显示这些值 剧本:排除非'的单元格;t使用Powershell显示,powershell,Powershell,我无法排除表中未显示的单元格。以下脚本允许显示ComputerName列中未显示的值,如果单元格与结果中未显示的值相匹配,则显示这些值 剧本: $csv = Import-Csv .\test1.csv -Delimiter ';' $ref = @($csv.ComputerName) foreach ($row in $csv) { foreach ($col in 'OtherComputerName', 'OtherComputer', 'AndAgain') { if (
$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
你想要的是可能的,但我不推荐。在代码中,有行和列。其思想是一行中的数据是相关的 在您的数据中,您位于多个不同的列之后,其中一行中的数据不相关。因此,本质上,您需要的是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
输出:
$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
你的问题不清楚。“排除空单元格”是什么意思?要么排除整列,要么从结果中排除该行。这些值将被您的代码替换:
$row.$col='
预期结果为Up。您需要详细说明从输入数据获取预期结果所使用的标准。只是说“排除空单元”是没有意义的,因为你预期的结果在中间列中有一个空的单元。你使用的是什么版本的PuxS壳?V1.0 PosikSee ISI有一个错误:索引不可能在表中使用。Null@charlo我已更改顶行$csv=…
以匹配您的代码。除此之外,我不知道为什么会出现错误;我在你的数据上测试了这一点。我知道,但是在这一行提供的错误是“{0,-20}{1,-20}{2,-20}”-f$OtherComputerName[$I],$OtherComputer[$I],$AndAgain[$I]
@charlo你是否使用了具有不同列标题的输入?不,我只是复制了你的代码来检查并更改了文件名,如果是问题,我没有触及文件的内容。