最も簡単な方法で、現在のディレクトリにほとんどの行がある5つのファイルを取得するにはどうすればよいですか?
「ThePragmaticProgrammer」の「トランスフォーメーションプログラミング」の章にそのようなシェルコマンドがあります。
その機能は、現在のディレクトリで最も多くの行を持つ5つのファイルを一覧表示することです。
$ find . -type f | xargs wc -l | sort -n | tail -6 | head -5
470 ./debug.pml
470 ./test_to_build.pml
487 ./dbc.pml
719 ./domain_languages.pml
727 ./dry.pml
PowerShellで同じことをしようとしていますが、言葉が多すぎるようです
(Get-ChildItem .\ | ForEach-Object {$_ | Select-Object -Property 'Name', @{label = 'Lines'; expression = {($_ | Get-Content).Length}}} |Sort-Object -Property 'Lines')|Select-Object -Last 5
もっと簡単な方法があると思いますが、私には考えられません。
PowerShellを使用して最も簡単な方法で、現在のディレクトリ内のほとんどの行を含むファイルを取得するにはどうすればよいですか?
もちろん、長さを短くするためにカスタムのエイリアスや略語を使用する必要はありません。見た目は簡潔ですが、読みやすさが失われます。
回答
2 iRon
Get-Content * | Group-Object PSChildName | Select-Object Count, Name |
Sort-Object Count | Select-Object -Last 5
1 if_ok_button
私はついに自分の満足のいく答えを見つけました!
3つのパイプライン演算子を使用し、シェルは5つを使用しました!
さらに、取得するのはオブジェクトであり、より拡張性の高い操作に使用できます。
Linuxのシェルよりも気分がいいです。
dir -file | sort {($_ | gc).Length} | select -l 5
pwnosh
Linqを使用したFile.ReadLinesまたはCountプロパティを使用したFile.ReadAllLinesのいずれかを試してください。
File.ReadLines
Get-ChildItem .\ -File |
Select-Object -Property Name, @{n='Lines'; e= {
[System.Linq.Enumerable]::Count([System.IO.File]::ReadLines($_.FullName))
}
} | Sort-Object -Property 'Lines' -Descending | Select-Object -First 5
File.ReadAllLines
Get-ChildItem .\ -File |
Select-Object -Property Name, @{n='Lines'; e= {
[System.IO.File]::ReadAllLines($_.FullName).Count
}
} | Sort-Object -Property 'Lines' -Descending | Select-Object -First 5
Theo
迅速なアプローチは、以下を使用することswitch -File
です。
$files = (Get-ChildItem -File ).FullName $result = foreach ($file in $files) {
$lineCount = 0 switch -File $file {
default { $lineCount++ } } [PsCustomObject]@{ File = $file
Lines = $lineCount } } $result | Sort-Object Lines | Select-Object -Last 5