我有一些CSV文件。以下是一个例子。请注意,列B Y
和C Z
的标题包含尾随空格。
A X,B Y ,C Z ,D 1,2,3,4 ....
以下脚本返回B Y
和C Z
的空值。
Import-Csv .\test.csv | select -Property "A X", "B Y", "C Z"
即使列标题中有尾随空格,它是否是一种返回值的方法?
答案 0 :(得分:1)
有一个简单的解决方案,但它有一个警告
Import-Csv c:\temp\temp.csv | select -Property "A X*", "B Y*", "C Z*"
使用星号,它匹配以 C Z
开头的列。虽然不是在这种情况下,但是也有可能与其他列匹配。就像有两列“C Z”和“C Znotme”一样,两者都会被退回。
另一个想法
如果您愿意,可以通过从列
中删除那些外部空格来修复文件$path = "c:\temp\temp.csv"
$file = Get-Content $path
($file[0] -replace "\s*,\s*",",").Trim() | Set-Content $path
$file | Select -Skip 1 | Add-Content $path
"\s*,\s*",","
会替换逗号.Trim()
会获得任何前导或尾随空格将第一行写回文件,然后添加剩余内容。这对于具有1000行的文件来说并不理想,但它仍然可以工作。
答案 1 :(得分:0)
如果您想按列位置选择它们:
Import-Csv .\test.csv | select -Property ($_.psobject.properties.name)[0,1,2]
答案 2 :(得分:0)
只需添加CSV文件中显示的空格即可。
Import-Csv .\test.csv | select -Property "A X", "B Y ", "C Z "
有关PowerShell的有趣之处在于,如果它的变量在名称中有空格,它并不关心。在这种情况下,它完全是关于解析器并确保PowerShell知道您正在寻找什么。
New-Variable -Name "Variable 1" -Value "Value 1"
Get-Variable -Name "Variable 1" # Will return "Value 1"
${Variable 1} # Will return "Value 1"
$obj = New-Object PSObject -Property @{ "Some Property" = "Value" }
$obj.'Some Property' # Will return "Value"