如何使用powershell在文本文件中查找唯一单词,然后将唯一单词存储在文本文件



我正在使用PowerShell。在这里,我想从文本文件中删除重复的单词,然后将唯一的单词存储在文本文件中。我在这里做什么。

$A = $( foreach ($line in Get-Content C:Test1File1.txt) {
$line.tolower().split(" ")
}) | Sort-Object | Get-Unique
$A | export-csv "somefile.csv"

这是我的档案。

PowerShell可以使用一种称为hashset的dotnet类型,它非常适合这样做,而且速度也很快!

首先,我们在PowerShell中将该文件读取到内存中,并将其分配给一个名为$lines的变量。

接下来,我们只划分为唯一的$words

最后,我们创建了一个哈希集,它只允许使用唯一的单词或项目。

$lines = get-content "C:UsersStephenOneDriveDocumentsquotes.txt"
[string[]]$words = $lines.Split()
$uniqueWords = [System.Collections.Generic.HashSet[string]]::new($words)

这里有一些关于它如何工作的信息,我们使用的是接受输入值的hashset构造函数。

但速度很快

使用哈希集的速度也快得惊人!我测量了samplefile.com中10MB大小合理的文本文件的性能,该文件包含许多著名的名言和其他信息。

Method           TotalMs
------           -------
Get-Unique    21484.4956
Using Hashset  1840.7407

获取哈希集的速度要快得多。在最坏的情况下,速度快一个数量级,我以前见过两个数量级或更多。

或者简单地作为一行

(Get-Content 'C:Test1File1.txt' -Raw) -split 'W' | Sort-Object -Unique | Set-Content -Path 'C:Test1File2.txt'

W是非单词字符(如空格、逗号等(的正则表达式。

您的示例的主要问题是您没有处理从split函数返回的数组:

Get-Content hello.txt | ForEach-Object { $wrds=$_.Split(" "); foreach ($i in $wrds) {  Write-Output $i } } | Sort-Object | Get-Unique

在执行排序和处理重复之前,将每一行拆分为数组wrd,然后对内容进行循环以写入输出。

最新更新