我要努力理解我的问题。通常,在Powershell中,我会执行import-csv,并且得到的输出看起来很像:
col1 : Mary.jane.doe
Col2 : John
然后我可以轻松地走动,做我真正想要做的事情。但是我有给我的文件:
col1 col2
---- ----
Mary.jane.doe John
我需要能够在第一列上进行拆分并将其放入变量中,这样我才得到“ Mary”,然后将其放入其自己的列中,以便我的输出如下:
col1 col2 col3
---- ---- -----
Mary Mary.jane.doe John
在此先感谢您的回答,这也是我第一次真正需要在Powershell中学习以了解它是如何工作的,因为这是我第一次使用csv,txt文件等方法来解决问题。
/>
在Powershell中?我使用的大多数计算机都具有Powershell2。
答案 0 :(得分:3)
首先,您需要更新操作系统,因为Powershell 2.0仅是不支持Windows版本的默认设置,现在我可以肯定。除此之外,这可以通过几种方法完成。由于您将要更改每个列的列标题(根据您的示例),因此我将通过ForEach-Object
循环传递CSV数据,并基于每个现有对象创建一个新对象,然后输出该对象。 / p>
$MyCSV = Import-Csv C:\Path\To\File.csv
$NewCSV = $MyCSV | ForEach-Object {
New-Object PSCustomObject -Property @{
'Col1' = $_.Col1.Split('.')[0]
'Col2' = $_.Col1
'Col3' = $_.Col2
}
} | Select-Object col1, col2, col3
编者注:PSv2不支持按顺序定义自定义对象的属性 ,这就是为什么需要进行Select-Object
调用以确保所需的属性枚举顺序的原因。在PSv3 +中,您可以将自定义对象创建为[pscustomobject] @{ ... }
,这确实遵循属性定义的顺序。
这将迭代CSV,并为每个记录创建一个具有所需属性的新记录。就像我说的那样,有几种方法可以完成此操作,但是我认为这是考虑您需求的最简单方法。