0

我有一个带有标题的 ConvertFrom-CSV 命令,它可以导入一个文本文件,一切都很好。

我正在努力解决什么问题,或者什么方法是从变量的内容中显示某些字段。

所以内容是:-

ColumnA,ColumnB,ColumnC,ColumnD
11,22,33,44
55,66,77,88
99,111,222,333

我想展示的是在一行上说 A 列和 C 列:-

11 33
55 77
99 222

目前,我列出了 A 列的完整转储,然后列出了所有 C 列,而不是从同一行合并的两者。

4

2 回答 2

0

方法 1:
首先使用Get-Contentcmdlet 从文件中获取内容,然后通过管道将其传递给ConvertFrom-CSVcmdlet,最后使用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对象并设置其属性,然后将该对象添加到$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
于 2013-09-05T14:34:44.857 回答
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;

Get-Content file.csv|convertfrom-csvAFAIK,使用vs.没有任何优势Import-CSV,至少在这种微不足道的情况下。

于 2013-09-05T15:42:35.760 回答