我有以下的powershell脚本来计算给定目录中每个文件的行数:
dir -Include *.csv -Recurse | foreach{get-content $_ | measure-object -line}
这给了我以下输出:
Lines Words Characters Property
----- ----- ---------- --------
27
90
11
95
449
...
每个文件的计数很好(我不需要单词,字符或属性),但我不知道计数的文件名是什么。
理想的输出类似于:
Filename Lines
-------- -----
Filename1.txt 27
Filename1.txt 90
Filename1.txt 11
Filename1.txt 95
Filename1.txt 449
...
如何将文件名添加到输出中?
答案 0 :(得分:7)
试试这个:
dir -Include *.csv -Recurse |
% { $_ | select name, @{n="lines";e={
get-content $_ |
measure-object -line |
select -expa lines }
}
} | ft -AutoSize
答案 1 :(得分:0)
我可以提供另一种解决方案:
Get-ChildItem $testPath | % {
$_ | Select-Object -Property 'Name', @{
label = 'Lines'; expression = {
($_ | Get-Content).Length
}
}
}
我在操作。 TXT文件,返回值是这样的↓
Name Lines
---- ----
1.txt 1
2.txt 2
3.txt 3
4.txt 4
5.txt 5
6.txt 6
7.txt 7
8.txt 8
9.txt 9
我想这样排序的原因是我正在重写一个 UNIX shell 命令(来自 The Pragmatic Programmer: Your Journey to Mastery 第 145 页)。
此命令的目的是找出行数最多的五个文件。
目前我的进度就是以上内容,我已经接近成功了。
然而,这个命令远比 UNIX shell 命令复杂!
我相信应该有更简单的方法,我正在努力寻找。
find . -type f | xargs wc -l | sort -n | tail -5