powershell - 使用 PowerShell 根据前 n 个字符删除重复项
问题描述
我有一个 CSV 文件,内容如下:
类型值 报价 这是第一个报价 引用 这是第一个引用! 报价 这是第一个报价? 报价 短报价 报价 短报价! 引用 这是一个明显更长的第三个引用 报价 这是一个明显更长的第三个报价。
我试图弄清楚如何识别报价的第一个唯一实例并删除重复。重复字符串末尾的无关字符是已知的,但字符串的长度可能从几个字符到超过 40 个字符不等。
解决方案
如果您只想忽略尾随标点符号来确定唯一值,您可以按自定义属性对记录进行分组,然后像这样处理组:
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}
而不是 character class [\.!\?]
,正如 Theo 在评论中提到的那样。
推荐阅读
- python-3.x - 如何从循环写入数据帧
- c# - 在峰值负载期间,并非所有日志都在使用 Serilog 的 AWS Elasticsearch Service 中
- firebase-realtime-database - 如何将分层数据从 Firebase 发送到 Google 工作表
- dataframe - 附加到数据框时,Scrapy Item 不返回 unicode?
- asp.net - ASP.NET,两个 Web.Config
- javascript - 如何在数据表的 ajax 请求的列部分中使用变量
- python - 对列表使用快速排序 >=7000 会导致堆栈溢出
- c# - 如何停止/暂停已在 WPF 上启动的情节提要?
- php - 我在为图像创建单独的表时遇到问题
- puppet - 傀儡代理的公网IP地址