powershell - 在powershell 2中操作csv数据

标签 powershell powershell-2.0

我正在疯狂地试图理解我的问题。通常在 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/

相关文章:

windows - 将函数的返回值赋给变量时不显示输出

powershell - 为什么我不能在 Powershell 中读取远程服务器上的这个文件?

regex - 解析文件夹中的脚本文件,并在Powershell + RegEx中标记多行字符串

powershell-2.0 - New-PSDrive 不支持凭据?

powershell - Powershell别名的多个值

powershell - 如何继续 ps 根据文件名的前 3 个字符创建文件夹

windows - Buildkite Windows 代理找不到 git 可执行文件

powershell - 如何检查网络端口访问并显示有用的消息?

powershell - Web.Config 在 Microsoft MSBuild 之外进行转换?

powershell - Powershell错误在ISE中正确输出,但在命令行执行中不正确