我有一个文件,我想要分割选择性行并选择选择性细胞。
这项工作:
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
答案 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