【发布时间】:2018-01-01 20:58:59
【问题描述】:
我有一个大约 10-15 列的数据文件,我想从中提取特定的列。有些列我知道确切的列标题,而另一些我只知道前两个字母总是“FC”。 如何仅选择我知道列标题的列和以“FC”开头的列? 从“FC”列开始,我尝试过这样:
$myCSV = Import-CSV "mydata.txt" -Delimiter "`t"
$FCcols = $myCSV[0].psobject.Properties | foreach { $_.Name } | Where {$_ -match "FC"}
$myCSV | select $FCcols
但我只是得到一个错误:
Select-Object : Cannot convert System.Management.Automation.PSObject to one of
the following types {System.String, System.Management.Automation.ScriptBlock}.
At line:3 char:16
+ $myCSV | select <<<< $FCcols
+ CategoryInfo : InvalidArgument: (:) [Select-Object], NotSupport
edException
+ FullyQualifiedErrorId : DictionaryKeyUnknownType,Microsoft.PowerShell.Co
mmands.SelectObjectCommand
那么,如果我尝试:
$myCSV = Import-CSV "mydata.txt" -Delimiter "`t"
$FCcols = [System.Collections.ArrayList]@()
$myCSV[0].psobject.Properties | foreach { $_.Name } | Where {$_ -match "FC"} | %{$FCcols.Add($_)}
$myCSV | select $FCcols
我得到了我想要的输出,除了它是“列标题:值”格式,像这样:
FC1839 : 0
FC1842 : 1
FC1843 : 6
FC1844 : 12
FC1845 : 4
FC1839 : 0
FC1842 : 0
FC1843 : 19
FC1844 : 22
FC1845 : 14
我可能只是遗漏了一些简单的东西,但是我如何才能选择这些匹配的列,然后将它们输出到另一个 .txt 文件(没有标题:值格式)?
【问题讨论】:
-
为什么不只是
$myCSV |Select *FC*? -
如果你使用 $myCSV | 你所拥有的会起作用选择 $FCcols.Name 但 Mathias 是对的...
-
@bunzab:确实,Mathias 的方法是最好的解决方案。
$FCcols.Name不起作用,因为$FCcols是 strings 数组(没有.Name属性)。事实上,该代码在 PSv3+ 中按原样运行,并且仅在 PSv2 中失败,因为我认为这是一个错误。
标签: powershell csv