【问题标题】:Removing duplicate lines from files keeping the original order in csv从保持csv中原始顺序的文件中删除重复行
【发布时间】:2021-08-13 13:47:23
【问题描述】:

我已经搜索但没有找到合理的解决方案。 在 csv 文件中,有很多列,但在第一列中我需要保持唯一匹配并删除重复项,但同时保持原始顺序...

数据示例:

Column1 Column2
A Data1
A Data2
A Data3
B Data4
B Data5
C Data6
C Data7
E Data8
E Data 9
E Data10
E Data11

期望:

Column1 Column2
A Data1
Data2
Data3
B Data4
Data5
C Data6
Data7
E Data8
Data 9
Data10
Data11

到目前为止,我可以从控制台漂亮列表中看到,但还没有找到一种方法如何只显示第一个唯一值。

Import-Csv 'C:\Data\smt.csv' -Delimiter ';' | Group-Object -Property Column1 | Where-Object { $_.count -ge 1 } -> 我可以看到我有多少重复..

如果我添加| Foreach-Object { $_.Group } ,那么它会显示不错的列表,但如果我尝试删除它,它会打乱原来的顺序。

也许有人可以告诉我如何处理它,或者我应该使用其他工具,而不是 Powershell。

真诚的

【问题讨论】:

  • 为了将来参考,在提出相关问题时,最好按原样显示数据(在本例中为纯文本 csv)而不是 html 表格。

标签: powershell


【解决方案1】:

你可以试试这样的:

$csv = @'
Column1  Column2
A  Data1
A  Data2
A  Data3
B  Data4
B  Data5
C  Data6
C  Data7
E  Data8
E  Data9
E  Data10
E  Data11
'@ -replace ' +',',' | ConvertFrom-Csv

$csv | Group-Object Column1 | ForEach-Object {
    
    $i = $true

    $_.Group.foreach({
        
        if(-not $i){
            $_.Column1 = ''
        }

        $i = $false
    })
}

在你的情况下,代码是:

$csv = Import-Csv 'C:\Data\smt.csv' -Delimiter ';'
$csv | Group-Object Column1 | ForEach-Object {
    
    $i = $true

    $_.Group.foreach({
        
        if(-not $i){
            $_.Column1 = ''
        }

        $i = $false
    })
}

结果:

PS /> $csv

Column1 Column2
------- -------
A       Data1  
        Data2  
        Data3  
B       Data4  
        Data5  
C       Data6  
        Data7  
E       Data8  
        Data9
        Data10 
        Data11 

【讨论】:

  • @Linyx 很乐意为您提供帮助。如果答案有帮助,请考虑accepting it
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多