我正在疯狂地试图理解我的问题。通常在 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。
最佳答案
首先,您需要更新操作系统,因为 PowerShell 2.0 仅在现在不再支持的 Windows 版本上是默认的,我很确定。除此之外,这可以通过几种方法相当简单地完成。由于您将更改每列的列标题(根据您的示例),我将通过 ForEach-Object 循环传输 CSV 数据,并根据每个现有对象创建一个新对象,并输出它。
$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,并为每条记录创建一条具有您所需属性的新记录。就像我说的,有几种方法可以实现这一点,但我认为考虑到您的需求,这将是最简单的。
关于powershell - 在powershell 2中操作csv数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53270986/