我必须每次显示四列,但每次显示三列,不需要显示列参考以解决空间问题。此代码允许显示列引用中不包含的单元格。当单元格匹配时,其他列中的单元格将消失。
文件:
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)
foreach ($row in $csv) {
foreach ($col in 'OtherComputerName', 'OtherComputer', 'AndAgain') {
if ($ref -contains $row.$col) { $row.$col = '' }
}
}
$csv
PS上的结果:我想不显示ComputerName列并退出单元格之间的空间。
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 :(得分:2)
您可以列出要包含的所有列/属性
$csv | Select-Object OtherComputerName,OtherComputer,AndAgain
或使用-ExcludeProperty
删除已命名的 - 但必须至少有一个-Property(位置0不必写出来,只需使用星号表示所有)
$csv | Select-Object * -ExcludeProperty ComputerName
此处的示例输出完全符合您的要求:
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
不是一张桌子,而是一张缩小的col:
$csv|select Othercomputer|where Othercomputer -ne ''
示例输出:
OtherComputer
-------------
infra-44
infra-8
infra-852
答案 1 :(得分:0)
这应该做你的工作:
$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 ComputerName , AndAgain