Powershell传递字符串ForEach
问题描述:
我想导入一个csv文件,并以管道分隔格式吐出列。Powershell传递字符串ForEach
Import-csv file.dat | foreach {($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3')}
这个伟大的工程,当我明确地传递的列值
($_.'ColumnX' + "|" $_.'ColumnY') etc.
我想传递的动态生成到的foreach组件变量的字符串。
我能够产生“串”,它看起来完全作为
"($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3')"
然而,PowerShell是治疗该生成的字符串作为一个单一的柱和第一列仅输出。
例如。
$columns = ($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3')
Import-csv file.dat | foreach {$columns}
任何建议如何获得在foreach部分下传递的列字符串,以便我得到正确的输出?
答
如果我理解正确,想读取一个CSV(逗号分隔值)文件并将其输出为垂直条“|”分离的文件。如果是这样的话,你可以做到以下几点:
gc file.dat | % {[string]::join("|", $_.split(','))}
这只是读取行,它分为领域,在每个逗号与竖线加入他们。
继@雷神锤的回答您的评论,在这里是如何在foreach块内使用动态字段名:
$f1 = "ColumnA"
$f2 = "ColumnB"
import-csv file.dat | % {$_.$($f1) + "|" + $_.$($f1)}
见我的回答here的说明。
你只是试图将逗号转换为管道?为什么不使用'-replace'? –