# ドラッグ&ドロップされたファイルを取得 param ( [string]$filePath ) # 解析行数制限と行カウント閾値を設定 $lineLimit = 50000 $countBorder = 100 # ファイルを読み込み Write-Output "Get-Content : $filePath ..." Write-Output "" $content = Get-Content $filePath $filePathWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($filePath) # Splitフォルダを作成 $splitFolder = "Split" if (-not (Test-Path $splitFolder)) { New-Item -ItemType Directory -Path $splitFolder Write-Output "" } # ファイルを分割して保存 Write-Output "Splitting the file into smaller chunks..." $splitFiles = @() for ($i = 0; $i -lt $content.Length; $i += $lineLimit) { $splitFile = "$splitFolder\$filePathWithoutExtension" + "_split_$($i / $lineLimit).txt" $splitFiles += $splitFile $content[$i..[math]::Min($i + $lineLimit - 1, $content.Length - 1)] | Set-Content $splitFile } # 結果を保存するファイル #$resultFile = "Result_frequentLines.txt" #if (Test-Path $resultFile) { # Remove-Item $resultFile #} # 結果を保存するファイル $resultFile = "$filePathWithoutExtension" + "_frqLines.txt" if (Test-Path $resultFile) { Remove-Item $resultFile } # 全体の頻出行をカウントする辞書型配列 $globalLineCounts = @{} # 各ファイルを処理 Write-Output "" $iMax = $splitFiles.Count $i = 0 foreach ($splitFile in $splitFiles) { $i = $i + 1 Write-Output "Results have been saved to $resultFile : $i / $iMax" $lineCounts = @{} $frequentLines = @{} $lines = Get-Content $splitFile foreach ($line in $lines) { # 数値を削除 $cleanLine = $line.Replace("0","").Replace("1","").Replace("2","").Replace("3","").Replace("4","").Replace("5","").Replace("6","").Replace("7","").Replace("8","").Replace("9","") # $cleanLine = $line -replace '\d', '' # 出現回数をカウント if ($lineCounts.ContainsKey($cleanLine)) { $lineCounts[$cleanLine]++ } else { $lineCounts[$cleanLine] = 1 } } # $countBorder 設定した回数以上出現する行を別の辞書型配列に格納 foreach ($key in $lineCounts.Keys) { if ($lineCounts[$key] -ge $countBorder) { $frequentLines[$key] = $lineCounts[$key] # トータル出現回数をカウント if ($globalLineCounts.ContainsKey($key)) { $globalLineCounts[$key] += $lineCounts[$key] } else { $globalLineCounts[$key] = $lineCounts[$key] } } } } # 結果をファイルに出力(出現回数の多い順にソート) $sortedGlobalLineCounts = $globalLineCounts.GetEnumerator() | Sort-Object Value -Descending foreach ($entry in $sortedGlobalLineCounts) { Add-Content $resultFile "$($entry.Value) | $($entry.Key)" }