सरल तरीके से वर्तमान निर्देशिका में अधिकांश लाइनों के साथ पांच फाइलें कैसे प्राप्त करें?
"द प्रोगैमैटिक प्रोग्रामर" के अध्याय "ट्रांसफॉर्मल प्रोग्रामिंग" में ऐसा शेल कमांड है।
इसका कार्य वर्तमान निर्देशिका में सबसे अधिक पंक्तियों वाली पांच फाइलों को सूचीबद्ध करना है।
$ 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 Power के साथ एक ही काम करने की कोशिश कर रहा हूं, लेकिन यह बहुत बुरा लगता है
(Get-ChildItem .\ | ForEach-Object {$_ | Select-Object -Property 'Name', @{label = 'Lines'; expression = {($_ | Get-Content).Length}}} |Sort-Object -Property 'Lines')|Select-Object -Last 5
मेरा मानना है कि एक सरल तरीका होगा, लेकिन मैं इसके बारे में सोच भी नहीं सकता।
PowerShell का उपयोग करके सरलतम तरीके से वर्तमान निर्देशिका में अधिकांश लाइनों वाली फाइलें कैसे प्राप्त करें?
बेशक, आपको लंबाई कम करने के लिए कस्टम एलियास और संक्षिप्ताक्षरों का उपयोग करने की आवश्यकता नहीं है। यद्यपि यह अधिक संक्षिप्त लगता है, यह पठनीयता खो देता है।
जवाब
Get-Content * | Group-Object PSChildName | Select-Object Count, Name |
Sort-Object Count | Select-Object -Last 5
मुझे आखिरकार मेरा अपना संतोषजनक जवाब मिल गया!
3 पाइपलाइन ऑपरेटरों का इस्तेमाल किया, शेल का इस्तेमाल किया 5!
क्या अधिक है, जो हमें मिलता है वह वस्तु है, जिसका उपयोग अधिक एक्सटेंसिबल संचालन के लिए किया जा सकता है।
मुझे लिनेक्स के खोल से बेहतर लगता है।
dir -file | sort {($_ | gc).Length} | select -l 5
फ़ाइल गुण के साथ या तो फ़ाइल की कोशिश करें।
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
उपयोग करने के लिए एक तेज़ तरीका होगा 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