¿Cómo contar líneas duplicadas en un archivo de texto usando PowerShell?
Recientemente, estaba trabajando en algunos archivos de texto en los que se me pedía que contara la cantidad de líneas duplicadas usando PowerShell. He probado diferentes métodos para hacer esto. En este tutorial, exploraremos diferentes formas de contar líneas duplicadas en un archivo de texto usando PowerShell.
Método 1: usar grupo-objeto
PowerShell proporciona el cmdlet Group-Object para contar líneas duplicadas en un archivo de texto. Este método lee el archivo, agrupa las líneas y luego cuenta las apariciones de cada línea.
Aquí tenéis un guión completo.
# Path to the text file
$filePath = "C:\MyFolder\MyExample.txt"
# Read the file and group by each line
$lineGroups = Get-Content $filePath | Group-Object
# Display the results
$lineGroups | ForEach-Object {
[PSCustomObject]@{
Line = $_.Name
Count = $_.Count
}
} | Sort-Object -Property Count -DescendingGet-Content $filePathlee el contenido del archivo.Group-Objectagrupa líneas idénticas.ForEach-Objectitera sobre cada grupo para crear un objeto personalizado con la línea y su recuento.Ordenar-Objeto -Recuento de propiedades -Descendingordena los resultados por recuento en orden descendente.
Ejecuté el script anterior y puedes ver que me brindó un informe detallado como en la captura de pantalla a continuación:
Método 2: usar una tabla hash
Usar una tabla hash es otra forma eficaz de contar líneas duplicadas en un archivo de texto en PowerShell. Este método implica recorrer cada línea y actualizar el recuento en una tabla hash.
Aquí hay un ejemplo completo; Échale un vistazo:
# Path to the text file
$filePath = "C:\MyFolder\MyExample.txt"
# Initialize a hashtable to store line counts
$lineCounts = @{}
# Read the file and count each line
Get-Content $filePath | ForEach-Object {
if ($lineCounts.ContainsKey($_)) {
$lineCounts[$_]++
} else {
$lineCounts[$_] = 1
}
}
# Display the results
$lineCounts.GetEnumerator() | ForEach-Object {
[PSCustomObject]@{
Line = $_.Key
Count = $_.Value
}
} | Sort-Object -Property Count -Descending@{}inicializa una tabla hash vacía.Obtener contenido $filePath | ForEach-Object lee el archivo y recorre cada línea. - El script comprueba si la línea existe en la tabla hash. Si es así, incrementa el recuento; de lo contrario, agrega la línea con un conteo de 1.
GetEnumerator()recupera los pares clave-valor de la tabla hash.- Los resultados se ordenan por conteo en orden descendente.
Puede ver el resultado en la siguiente captura de pantalla:
Método 3: usar una función personalizada
También puede crear una función personalizada para contar líneas duplicadas en un archivo de texto. La función lee el contenido del archivo, agrupa las líneas y luego filtra los grupos donde el recuento de líneas es mayor que uno. Esto indica que la línea está duplicada en el archivo.
Aquí está el guión completo:
function Get-DuplicateLines {
param (
[string]$filePath
)
# Check if the file exists
if (-Not (Test-Path $filePath)) {
Write-Error "The file path '$filePath' does not exist."
return
}
# Read the file and group by each line
$lineGroups = Get-Content $filePath | Group-Object
# Filter groups where the count is greater than 1 (duplicates) and select the line and count
$duplicates = $lineGroups | Where-Object { $_.Count -gt 1 } | Select-Object Name, Count
# Output the duplicate lines and their counts
return $duplicates
}
# Example usage of the function
$filePath = "C:\MyFolder\MyExample.txt"
$duplicateLines = Get-DuplicateLines -filePath $filePath
# Display the duplicate lines
if ($duplicateLines) {
$duplicateLines | Format-Table -AutoSize
} else {
Write-Output "No duplicate lines found."
}Puede ver el resultado en la captura de pantalla a continuación después de ejecutar el script de PowerShell usando el código VS.
Conclusión
En este tutorial de PowerShell, explico cómo contar líneas duplicadas en un archivo de texto usando PowerShell. Luego verificamos diferentes métodos con ejemplos.


