首页 > 解决方案 > 用于从 .csv 文件中读取 2 列数据的 Powershell 脚本

问题描述

我正在尝试编写一个 PowerShell 脚本来获取 csv 文件的 2 列:

ProductName          ProductCode
-----------------------------------------------------------
Java 7 Update 67     {26374892-xxxx-xxxx-xxxx-123456789012}
Java 8  Update 25    {26374892-xxxx-xxxx-xxxx-902341562789}

我只想获取ProductCode要在 foreach 循环中使用的列值。

我尝试了以下方式

$code1 = Get-Contect %path% | Foreach-Object {
    $_ -split '\s+' | Select-object -skip 1 | Select-Object -Last 1
} 

foreach($code in $code1){ write-host $code } 

我的输出低于

67,{232424-55567-8879-xxxxxxx} 
25,{324356456-5674-xxxx-xxxxxx}

但我只想输出产品代码,如

{3245345345-3454-56656757-xxxxx}

标签: powershell

解决方案


这看起来并不像 CSV。我想说最简单的方法是这样的:

Get-Content %path% | Foreach-Object { $_ -split '\s+' | Select-Object -Last 1 }

这样,您将在多个空格上拆分字符串后获得最后一个对象

附言。如果您需要跳过标题,您可以| Select-Object -Skip 1在 get-content
pps 之后添加。如果 import-csv 允许在delimiterimport csv 中使用正则表达式会更容易使用,但我怀疑它是否允许这样做。购买力平价。为我工作:

> cat .\Untitled-2.txt
ProductName ProductCode
Java 7 Update 67     {26374892-xxxx-xxxx-xxxx-123456789012}
Java 8  Update 25    {26374892-xxxx-xxxx-xxxx-902341562789}
> Get-Content .\Untitled-2.txt | select-object -skip 1 | Foreach-Object { $_ -split '\s+' | Select-Object -Last 1 }
{26374892-xxxx-xxxx-xxxx-123456789012}
{26374892-xxxx-xxxx-xxxx-902341562789}

推荐阅读