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

how to find unique word in text file and then store unique words in text file using powershell

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

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

这是我的 file.

PowerShell 可以使用称为散列集的 dotnet 类型,它非常适合执行此操作,而且速度也比喻光速!

首先我们在 PowerShell 中将文件读入内存并将其分配给一个名为 $lines.

的变量

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

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

$lines = get-content "C:\Users\Stephen\OneDrive\Documents\quotes.txt"
[string[]]$words = $lines.Split()
$uniqueWords = [System.Collections.Generic.HashSet[string]]::new($words)

这里有一些关于其工作原理的信息,我们使用的是 the hashset constructor which accepts an input value

但是速度很快!

使用哈希集也快得惊人!我在 10MB 的合理大小的文件上测量了性能,其中包含来自 samplefile.com 的文本以及一些名言和其他信息。

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

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

或者简单的单行

(Get-Content 'C:\Test1\File1.txt' -Raw) -split '\W' | Sort-Object -Unique | Set-Content -Path 'C:\Test1\File2.txt'

\W 是非单词字符的正则表达式,如 space、逗号等

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

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

将每一行拆分到数组 wrds 中,然后循环内容以写入输出,然后再执行排序和处理复制。