首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除未使用Powershell显示的单元格

排除未使用Powershell显示的单元格
EN

Stack Overflow用户
提问于 2017-06-20 15:58:59
回答 1查看 54关注 0票数 2

我不能排除没有在我的table.The中显示的单元格下面的脚本允许显示不在ComputerName列中的值,如果这些单元格匹配,这些值就不会显示在结果中。

脚本:

代码语言:javascript
复制
$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

文件:

代码语言:javascript
复制
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

结果是:

代码语言:javascript
复制
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         

我想排除空单元格,但我不知道这些值是否存在但没有显示,有人能帮我吗?

预期结果:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-06-21 17:52:41

你想要的是可能的,但我不建议你这样做。在您的代码中,有行和列。其思想是沿着一行的数据是相关的。

在您的数据中,您在几个不同的列之后,其中一行上的数据与无关。所以从本质上讲,你需要的是3个不同的列表,而不是一个表。

我建议为你的结果创建不同的列表。有很多方法可以做到这一点;我已经通过创建一个具有列标题名称的变量来实现。

之后,如果您愿意,可以手动将这些值显示为表。

输入- test1.csv

代码语言:javascript
复制
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

代码:

代码语言:javascript
复制
$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]
}

输出:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44647166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档