2012-01-20 38 views
5

Tôi có một tệp văn bản cần đọc trong Powershell.Cách đếm số hàng trong powershell

ký tự cuối cùng trong mỗi hàng là một trong hai một Y hoặc N.

Tôi cần phải đi qua các tập tin và sản lượng bao nhiêu Y và N đang chờ ở đó.

Bất kỳ ý tưởng nào?

Trả lời

6

Giả sử một file có tên "test.txt" ... Để có được số dòng kết thúc bằng Y, bạn có thể làm điều này:

get-content test.txt | select-string Y$ | measure-object -line 

Và để có được số dòng kết thúc bằng N, bạn có thể làm điều này:

get-content test.txt | select-string N$ | measure-object -line 

Hy vọng điều đó sẽ hữu ích.

+4

cho bất kỳ nhân viên của Google mà muốn câu trả lời này trong một biến ở đây nó là [code] $ a = (Get-Content filename.txt | Select-String "| Y $" | Measure-Object) .count [/ code] –

6

Để có được cả hai đếm trong một dòng duy nhất:

gc .\test.txt | %{ if($_ -match "Y$|N$"){ $matches[0]} } | group 
+0

Đẹp, điều đó cho thấy cách '$ match' có thể được sử dụng :) – stej

+0

+1 Đó là thực sự trơn! – Aaron

0

Tôi thích câu trả lời của @manojlds, vì vậy tôi sẽ ném một cái gì đó tương tự:

$grouped = (gc .\test.txt) -replace ".*(y|n)$",'$1' | group 

(khai thác có thể được sử dụng trên mảng cũng).

Sau đó, bạn có thể sử dụng nó như thế này:

($grouped | ? {$_.Name -eq 'y'}).count 
0
$(foreach ($line in [IO.File]::ReadAllLines(".\test.txt")) { 
    $line.Substring($line.Length - 1) 
}) | Group 
1
$lastchar = @{};get-content $file |% {$lastchar[$_[-1]]++};$lastchar 
2
Get-Content test.txt | Where-Object {$_ -match '[YN]$'} | Group-Object {$_[-1]} -NoElement 
Các vấn đề liên quan