powershell 编写一个脚本,按字母顺序对特定文件中的单词进行排序,并将它们放入26个名为A.txt、B.txt等直到Z.txt的文本文件中

tyky79it  于 2023-02-04  发布在  Shell
关注(0)|答案(1)|浏览(213)

我需要从一个特定的文件中按字母顺序排序单词,并将它们放入26个名为A.txt、B.txt等直到Z.txt的文本文件中。

$Content = Get-Content ".\\1.txt"
$Content = ($Content.Split(" .,:;?!/()\[\]{}-\`\`\`"")|sort)
$linecount = 0
$filenumber = 0
$destPath = "C:\\test"
$destFileSize = 26

$Content |Group {$_.Substring(0,1).ToUpper()} |ForEach-Object {
$path = Join-Path $destPath $_.Name
$\_.Group |Set-Content $path
}

$Content | % {
Add-Content $destPath$filenumber.txt "$\_"
$linecount++
If ($linecount -eq $destFileSize) {
$filenumber++  
$linecount = 0
}
}
a8jjtwal

a8jjtwal1#

你可以这样做,但这也可能意味着,如果文件中没有以某个字母开头的单词,那么某些文件可能无法写入:

$destPath = "D:\test"
(Get-Content -Path 'D:\Test\Lorem.txt' -Raw) -split '\W' -ne '' |
Group-Object {$_.Substring(0,1).ToUpperInvariant()} | 
Where-Object {$_.Name -cmatch '[A-Z]'} | ForEach-Object {
    $_.Group | Sort-Object | Set-Content -Path (Join-Path -Path $destPath -ChildPath ('{0}.txt' -f $_.Name))
}

如果您总是想要正好26个文件(即使某些文件可能不包含任何内容),请使用此文件

$destPath = "D:\test"
$wordGroups = (Get-Content -Path 'D:\Test\Lorem.txt' -Raw) -split '\W' -ne '' |
               Group-Object {$_.Substring(0,1).ToUpperInvariant()}
foreach ($char in ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' -split '(.)' -ne '')) {
    $outFile = Join-Path -Path $destPath -ChildPath ('{0}.txt' -f $char)
    $group = $wordGroups | Where-Object { $_.Name -eq $char }
    if ($group) { $group.Group | Sort-Object | Set-Content -Path $outFile }  # output the found words
    else { $null | Set-Content -Path $outFile }                              # or create an empty file
}

Where-Object {$_.Name -cmatch '[A-Z]'}子句使其忽略以A到Z以外的字符开头的单词

相关问题