如何使用powershell获取每个文件的文件名和行数

时间:2014-03-21 12:22:44

标签: powershell

我有以下的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
  ...

如何将文件名添加到输出中?

2 个答案:

答案 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