PowerShell管道Get-Content分割然后选择表达式

时间:2015-05-21 18:16:20

标签: powershell pipeline

我有一个文件,我想要分割选择性行并选择选择性细胞。

这项工作:

Get-Content F:\dat | ? {$_  -like "1,*"} | % {$_.Split(',')} 

但我不能继续连接选择一些项目:

Get-Content F:\dat | ? {$_  -like "1,*"} | % {$_.Split(',')} | Select -Property  @{name="Name"; expression = {$_[0]}}, @{name="Value"; expression = {$_[5]}}

我记得未发现的结果,suce就像这样的文件:

  

1," 123",456," bla bla bla",0,569.2

结果出现了:

Name  Value  
1     569.2  

1 569.2

结果完成:

Name Value  
---- ----   
  1        
  "        
  4        
  "  b      
  0        
  5     

2 个答案:

答案 0 :(得分:2)

以下是一切都崩溃了:

| % {$_.Split(',')} |

管道中的下一个命令只会收到一个可枚举的单个字符串流(拆分操作的结果),而不是字符串数组。

因此,$_[0]操作被解析为"从该字符串中获取第一个[char]",这就是为什么你会看到你得到的奇怪输出。

等到你在拆分字符串之前实际计算属性:

Get-Content F:\dat | ? {$_  -like "1,*"} | Select -Property  @{name="Name"; expression = {$_.Split(',')[0]}}, @{name="Value"; expression = {$_.Split(',')[5]}}

答案 1 :(得分:1)

您可以改为使用ConvertFrom-Csv

Get-Content F:\dat|
Where-Object {$_ -like "1,*"}|
ConvertFrom-Csv -Header Name,Ignore1,Ignore2,Ignore3,Ignore4,Value|
Select-Object Name,Value