使用PowerShell根据前n个字符删除重复项

时间:2018-12-02 02:52:37

标签: powershell

我有一个CSV文件,其内容如下:

TYPE     VALUE
Quote    This is the first quote
Quote    This is the first quote!
Quote    This is the first quote?
Quote    Short quote
Quote    Short quote!
Quote    This a significantly longer third quote
Quote    This a significantly longer third quote.

我试图弄清楚如何识别报价的第一个唯一实例并删除重复项。重复字符串末尾的多余字符是已知的,但是字符串的长度可能从几个字符到40个以上不等。

1 个答案:

答案 0 :(得分:0)

如果您只想忽略标点符号来确定唯一值,则可以按自定义属性对记录进行分组,然后按以下方式处理组:

Import-Csv 'C:\path\to\input.csv' |
    Group-Object { $_.VALUE -replace '[\.!\?]+$' } |
    ForEach-Object {
        $_.Group |
            Sort-Object Length -Descending |
            Select-Object -Last 1
    }

或者,将原来的VALUE属性替换为计算所得的属性,然后选择唯一记录:

Import-Csv 'C:\path\to\input.csv' |
    Select-Object TYPE, @{n='VALUE';e={$_.VALUE -replace '[\.!\?]+$'} -Unique

要从每个值的末尾删除任何标点符号,还可以使用转义序列\p{P}代替字符类[\.!\?],如Theo在评论中所述。