PowerShell'de Bir Dosyadaki Satırları Nasıl Sayabilirim?


Son zamanlarda PowerShell'de bir dosya sistemi gereksinimi üzerinde çalışırken, PowerShell kullanarak bir dosyada sunulan satır sayısını saymam gerekiyordu. Farklı yöntemler denedim. Bu PowerShell eğitiminde, PowerShell kullanarak bir dosyadaki satırları saymak için çeşitli yöntemleri örneklerle inceleyeceğiz.

PowerShell kullanarak bir dosyadaki satırları saymak için, Measure-Object ile birleştirilmiş Get-Content cmdlet'ini kullanabilirsiniz. Örneğin, $lineCount=(Get-Content 'C:\path\to\file.txt' | Measure-Object -Line).Lines size 'file.txt' dosyasındaki toplam satır sayısını verecektir. Bu yöntem her boyuttaki dosya için etkilidir ve PowerShell'de satır sayma görevleri için standart yaklaşımdır.

PowerShell kullanarak bir metin dosyasındaki satırları saymak için farklı yöntemleri kontrol edelim.

Yöntem 1: Get-Content ve Measure-Object'i kullanma

PowerShell'de bir dosyadaki satırları saymanın en basit ve en basit yöntemi, dosyayı okumak için Get-Content cmdlet'ini kullanmak ve çıktıyı Measure-Object cmdlet'ine aktarmaktır. satırları saymak için.

İşte tam komut dosyası.

$filePath = "C:\MyFolder\file.txt"
$lineCount = (Get-Content $filePath | Measure-Object -Line).Lines
Write-Host "The file has $lineCount lines."

Bu komut dosyasında, Get-Content belirtilen yoldaki dosyayı okur ve Measure-Object -Line satır sayısını hesaplar. .Lines özelliği bize daha sonra çıktısını aldığımız gerçek sayıyı verir.

Yukarıdaki betiği VS kodunu kullanarak çalıştırdım ve çıktıyı aşağıdaki ekran görüntüsünde görebilirsiniz:

Yöntem 2: Büyük Dosyalar için Get-Content Akışı

Daha büyük dosyalar için, Get-Content dosyanın tamamını belleğe okuduğundan yukarıdaki yöntem çok fazla bellek tüketebilir. Büyük dosyaları daha verimli bir şekilde işlemek için dosya içeriğini aktarabilir ve satırları tek tek sayabilirsiniz. Bu yöntem daha yavaştır ancak daha az bellek kullanır.

$filePath = "C:\path\to\your\largefile.txt"
$lineCount = 0
Get-Content $filePath -ReadCount 0 | ForEach-Object { $lineCount++ }
Write-Host "The file has $lineCount lines."

-ReadCount 0 kullanarak, Get-Content dosyayı satır satır aktarır ve ForEach-Object döngüsü her satır için satır sayısını artırır .

Yöntem 3: Birden Çok Dosya için PowerShell Betiği Kullanma

Bir klasör içindeki birden çok metin dosyasındaki satırları saymanız gerekiyorsa, her dosyada yineleme yapmak ve satırları saymak için bir PowerShell betiği kullanılabilir.

$folderPath = "C:\MyFolder"
Get-ChildItem $folderPath -Filter *.txt | ForEach-Object {
    $file = $_
    $lineCount = (Get-Content $file.FullName | Measure-Object -Line).Lines
    Write-Host "The file $($file.Name) has $lineCount lines."
}

Burada, Get-ChildItem belirtilen klasördeki tüm .txt dosyalarını alır ve her dosya için Get-Content'i kullanarak satırları sayarız. ve Measure-Object cmdlet'leri.

Çıktıyı aşağıdaki ekran görüntüsünde görebilirsiniz; klasör içindeki her metin dosyasında kaç satırın sunulduğunu gösterir.

Yöntem 4: Get-Content ve Select-Object ile Satırları Sayma

PowerShell'de bir dosyadaki satırları saymanın başka bir yolu da Get-Content'i Select-Object ile birlikte kullanmaktır.

İşte bir dosyada sunulan satırları saymak için PowerShell betiğinin tamamı.

$filePath = "C:\MyFolder\file.txt"
$lineCount = (Get-Content $filePath | Select-Object -Last 1).LineNumber
Write-Host "The file has $lineCount lines."

Bu yöntem, yalnızca toplam satır sayısını saymak yerine, dosyadan belirli bir satırı almanız ve görüntülemeniz gerektiğinde özellikle kullanışlıdır.

Yöntem 5: Bir Klasör için Hızlı Sayım

Ayrıntılı çıktıya ihtiyaç duymadan PowerShell kullanarak bir klasördeki her dosyanın hızlı satır sayımı için tek satırlık basit bir komut dosyası kullanabilirsiniz.

$folderPath = "C:\MyFolder"
Get-ChildItem $folderPath -Recurse | ForEach-Object { (Get-Content $_.FullName | Measure-Object -Line).Lines }

Bu komut dosyası, belirtilen klasörde ve alt klasörlerinde bulunan her dosya için yalnızca satır sayımlarının çıktısını verecektir.

Boş Hatları İşleme

Boş satırları sayının dışında bırakmak istiyorsanız PowerShell'deki Where-Object cmdlet'ini kullanarak bunları filtreleyebilirsiniz.

$filePath = "C:\MyFolder\file.txt"
$lineCount = (Get-Content $filePath | Where-Object { $_.Trim() -ne "" } | Measure-Object -Line).Lines
Write-Host "The file has $lineCount non-empty lines."

Çözüm

Bu PowerShell eğitiminde, PowerShell'deki bir dosyadaki satırları saymak için Get-Content, Measure-Object ve < gibi farklı yöntemleri açıkladım.Get-ChildItem vb.

İlgili makaleler