代码之家  ›  专栏  ›  技术社区  ›  Wiktor

PowerShell-导入csv时如何忽略两行

  •  0
  • Wiktor  · 技术社区  · 8 年前

    从PowerShell中的csv导入数据时,是否可以忽略具有相同名称和姓氏的行。这是一种忽略它们而不在广告中更新它们的方法吗?

    我想换个信

    3 回复  |  直到 8 年前
        1
  •  1
  •   Theo    8 年前

    $csv = 'Name,Surname,ID
    Stephen,Owen,1234
    Lindey,Owen,2345
    Stephen,Owen,3456
    Pippin,Owen,4567
    John,Elway,5678
    Lindey,Elway,9876
    John,Elway,5555'
    
    $users = $csv | ConvertFrom-Csv
    # add a column with the first and lastnames combined
    foreach ($user in $users) {
        $user | Add-Member -MemberType NoteProperty -Name 'FullName' -Value ("{0} {1}" -f $user.Name, $user.Surname)
    }
    
    # now create an array with all users except those that have the same 'FullName'
    $noDupes = @()
    foreach ($user in $users) {
        If ($user.FullName -in $noDupes.FullName){
            Write-Warning "Skipping user $($user.FullName), ID $($user.ID), already processed"
            continue
        }
        "importing $($user.Name) $($User.SurName)"
        $noDupes += ($user)
    }
    
    $noDupes
    

    importing Stephen Owen
    importing Lindey Owen
    WARNING: Skipping user Stephen Owen, ID 3456, already processed
    importing Pippin Owen
    importing John Elway
    importing Lindey Elway
    WARNING: Skipping user John Elway, ID 5555, already processed
    
    Name    Surname ID   FullName    
    ----    ------- --   --------    
    Stephen Owen    1234 Stephen Owen
    Lindey  Owen    2345 Lindey Owen 
    Pippin  Owen    4567 Pippin Owen 
    John    Elway   5678 John Elway  
    Lindey  Elway   9876 Lindey Elway
    

    $csv = 'Name,Surname,ID
    Stephen,Owen,1234
    Lindey,Owen,2345
    Stephen,Owen,3456
    Pippin,Owen,4567
    John,Elway,5678
    Lindey,Elway,9876
    John,Elway,5555'
    
    $users = $csv | ConvertFrom-Csv
    # add a column with the first and lastnames combined
    foreach ($user in $users) {
        $user | Add-Member -MemberType NoteProperty -Name 'FullName' -Value ("{0} {1}" -f $user.Name, $user.Surname)
    }
    
    # find all duplicate objects using the 'FullName'
    $names = @()
    $dupes = @()
    foreach ($user in $users) {
        If (-not ($user.FullName -in $names)) {
            $names += ($user.FullName)
        }
        else {
            $dupes += $user.FullName
            Write-Warning "Duplicate user skipped: $($user.FullName)"
        }
    }
    
    $users = ($users | Where-Object { $_.FullName -notin $dupes })
    
    $users
    

    Name   Surname ID   FullName    
    ----   ------- --   --------    
    Lindey Owen    2345 Lindey Owen 
    Pippin Owen    4567 Pippin Owen 
    Lindey Elway   9876 Lindey Elway
    
        2
  •  2
  •   FoxDeploy    8 年前

    $csv = 'Name,Surname,ID
    Stephen,Owen,1234
    Lindey,Owen,2345
    Stephen,Owen,3456
    Pippin,Owen,4567
    John,Elway,5678'
    
    $users = $csv | ConvertFrom-Csv 
    

    $processed = New-Object System.Collections.ArrayList
    ForEach ($user in $users){
       #Do your processing here
        $null = $processed.Add($user)
    }
    

    $processed $user

    ForEach ($record in $processed){
        if ($record.Name -eq $User.Name){
            If ($record.SurName -eq $User.SurName){
                Write-Warning "Skipping user $($user.Name) $($user.SurName), ID $($user.ID), already processed"
                continue #This Keyword skips this item and continues to the next in the list
            }
        }
    }
    

    $users = $csv | ConvertFrom-Csv 
    $processed = New-Object System.Collections.ArrayList
    ForEach ($user in $users){    
        ForEach ($record in $processed){
            if ($record.Name -eq $User.Name){
                If ($record.SurName -eq $User.SurName){
                    Write-Warning "Skipping user $($user.Name) $($user.SurName), ID $($user.ID), already processed"
                    continue
                }
            }
        }
        "importing $($user.Name) $($User.SurName)"
        $null = $processed.Add($user)
    }
    

    importing Stephen Owen
    importing Lindey Owen
    WARNING: Skipping user Stephen Owen, ID 3456, already processed
    importing Pippin Owen
    importing John Elway
    
        3
  •  0
  •   WarTech    8 年前

    $users | Select-Object -Property @{ Name = "FullName"; Expression = { $_.Name + $_.Surname }}, Name, Surname, ID | Sort-Object FullName -Unique