【问题标题】:Powershell split csv column value into two seperate column valuesPowershell 将 csv 列值拆分为两个单独的列值
【发布时间】:2016-01-21 04:46:14
【问题描述】:

假设我有一个包含 5 条记录的 csv 文件(实际上它大约是 80,000 条)。

CSV 文件:

column1,columnICareAbout,column2
someRandomValue,John Doe - Generic,someRandomValue
someRandomValue,Captain Teemo - pocketPet,someRandomValue
someRandomValue,Pinky Brain - Fictional,someRandomValue
someRandomValue,Miyamoto Musashi - swordsman,someRandomValue
someRandomValue,Kato yasunori - troubleMaker - Extreme,someRandomValue

给定以下代码:

注意:我知道数组值是正确的,我只需要知道如何在表达式中循环遍历数组。

$firstNames = @()
$firstNameCounter = 0
$lastNames = @()
$lastNameCounter = 0

Import-Csv $file1 | 
    foreach { 
        $firstNames += $_.Description.split(" ")[0]
        $lastNames += $_.Description.split(" ")[1]
    }

Import-Csv $file1 |
    Select-Object  *, @{n='First Name'; e={$firstNames[$firstNameCounter];$script:firstNameCounter++}}, @{n='Last Name'; e={$lastNames[$lastNameCounter];$script:lastNameCounter++}} | 
    Export-Csv "testresults.csv" -NoTypeInformation -Force

我每次只获取数组中的第一个元素。所以最终的结果文件是这样的

column1,columnICareAbout,column2,First Name,Last Name
someRandomValue,John Doe - Generic,someRandomValue,John,Doe
someRandomValue,Captain Teemo - pocketPet,someRandomValue,John,Doe
someRandomValue,Pinky Brain - Fictional,someRandomValue,John,Doe
someRandomValue,Miyamoto Musashi - swordsman,someRandomValue,John,Doe
someRandomValue,Kato yasunori - troubleMaker - Extreme,someRandomValue,John,Doe

我希望文件看起来像这样

column1,columnICareAbout,column2,First Name,Last Name
someRandomValue,John Doe - Generic,someRandomValue,John,Doe
someRandomValue,Captain Teemo - pocketPet,someRandomValue,Captain,Teemo
someRandomValue,Pinky Brain - Fictional,someRandomValue,Pinky,Brain
someRandomValue,Miyamoto Musashi - swordsman,someRandomValue,Miyamoto,Musashi
someRandomValue,Kato yasunori - troubleMaker - Extreme,someRandomValue,Kato,yasunori

谁能告诉我我做错了什么?

【问题讨论】:

  • 为什么分两步做呢? Import-CSV $File1 | Select *,@{l='First Name';e={$_.Description.Split(' ')[0]}},@{l='Last Name';e={$_.Description.Split(' ')[1]}} | Export-CSV testresults.csv -NoType -Force
  • 与其有第二个循环,不如在第一个循环中附加属性$_ | Add-Member -MemberType NoteProperty -Name FirstName -Value $firstName
  • 感谢 TheMadTechnician。这行得通。虽然我仍然想知道如何在表达式期间迭代数组。这将帮助我解决我目前面临的问题。
  • @skukx 感谢您的回答,我也许可以在我面临的下一个问题上使用这个逻辑。

标签: powershell powershell-3.0


【解决方案1】:
Import-Csv $file1 | 
foreach { 
    $firstName = $_.Description.split(" ")[0]
    $lastName = $_.Description.split(" ")[1]

    $_ | Add-Member -MemberType NoteProperty -Name FirstName -Value $firstName
    $_ | Add-Member -MemberType NoteProperty -Name LastName -Value $lastName
} | Export-Csv 'results.csv'

Add-Member 命令将追加 2 列 FirstName 和 LastName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2019-11-05
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多