我有一个带有标题的ConvertFrom-CSV命令可以很好地导入文本文件。
我正在努力解决问题,或者从变量内容中显示某些字段的方法是什么。
所以内容是: -
ColumnA,ColumnB,ColumnC,ColumnD
11,22,33,44
55,66,77,88
99,111,222,333
我想要展示的是A栏和A栏。 C在一行: -
11 33
55 77
99 222
当然,我得到了A列的完整转储,然后列出了所有C列,而不是从同一行合并的两列。
答案 0 :(得分:0)
方法1:
首先使用Get-Content
cmdlet从文件中获取内容,然后将其传递给ConvertFrom-CSV
cmdlet,最后将Select-Object
和表达式语法组合在一起以组合列。
Get-Content C:\Script\import.csv | ConvertFrom-CSV -Header ColumnA,ColumnB,ColumnC,columnD | Select ColumnB,ColumnD,@{Name="ComputedAC";Expression = {$_.ColumnA + " " + $_.ColumnC }} | Export-CSV C:\script\export.csv
方法2:
您可以使用select对象和表达式语法来组合columnA和ColumnC
Import-csv -Path C:\Script\import.csv | Select ColumnB,ColumnD,@{Name="ComputedAC";Expression = {$_.ColumnA + " " + $_.ColumnC }} | Export-CSV C:\script\export.csv
方法3 (由于性能问题,建议较少):
我正在创建一个新的PSObject
并设置其Property,然后将该对象添加到$Objs
数组对象,然后对新export-csv
文件执行.csv
。这应该输出到你想要的格式。
$objs =@();
$output = Import-csv -Path C:\script\import.csv | ForEach {
$Object = New-Object PSObject -Property @{
ColumnAC = [String]::Concat($_.ColumnA," ",$_.ColumnC)
ColumnB = $_.ColumnB
ColumnD = $_.ColumnD
}
$objs += $Object;
}
$objs
$objs | Export-CSv C:\script\export.csv
答案 1 :(得分:0)
如前所述,准确输出 :
import-csv File.csv|`
select-object -property @{Name="Output";Expression={$_.ColumnA + " " + $_.ColumnC;}}|`
select-object -ExpandProperty output;
此:
您也可以使用[String]::Join()
:
import-csv File.csv|`
select-object -property @{Name="Output";Expression={ [String]::Join(" ", @($_.ColumnA, $_.ColumnC));}}|`
select -ExpandProperty output;
AFAIK,使用Get-Content file.csv|convertfrom-csv
与Import-CSV
没有任何好处,至少在这种情况下是微不足道的。