来自Powershell的单行输出字段

时间:2013-09-05 14:20:33

标签: powershell

我有一个带有标题的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列,而不是从同一行合并的两列。

2 个答案:

答案 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;

此:

  • 导入CSV
  • 从CSV中选择一列,其列A的计算值与列C连接,其间有空格
  • 选择计算值作为简单的字符串数组

您也可以使用[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-csvImport-CSV没有任何好处,至少在这种情况下是微不足道的。