在Powershell中读取多个文件并计算每个文件的行数,然后将所有这些信息写入一个CSV文件

brc7rcf0  于 2023-01-20  发布在  Shell
关注(0)|答案(1)|浏览(125)

我需要读取多个文件,并计算每个文件的行数。然后将所有这些信息写入一个带有文件路径信息的CSV文件中。
我可以写一个代码(从论坛的帮助下),这将有助于阅读所有文件和打印所需的信息。

    • 脚本:**
Get-ChildItem -Path C:\Logs\test *.log | Select-Object -Property FullName,@{Name="LineCount";$Expression={@(Get-Content -Path $_.FullName).Length}}
    • 脚本的输出:**
FullName                    LineCount
--------                    ---------
C:\Logs\test\ANCD065.log          296
C:\Logs\test\ANCE066.log          287
    • 问题:**

1.问题是无法将上述信息写入CSV文件。

Write "what parameter need pass not clear to me" | Out-File C:\Log\OP.CSV

1.脚本读取所有行,有没有办法在某些行之后开始读取行?给定文件need中的一个例子是从第9行(开始)到结束(可能是300)计数行。

1.     3.03           MET DATA                                RINEX VERSION / TYPE
2. cnvtToRINEX 3.14.0  convertToRINEX OPR  20220511 072939 UTC PGM / RUN BY / DATE 
3. ----------------------------------------------------------- COMMENT            
4. XYXTY3                                                       MARKER NAME         
5. UBWTZ3                                                       MARKER NUMBER       
6.     3    PR    TD    HR                                    # / TYPES OF OBSERV 
7.  0083019.4060  0025010.0967  0253356.6176        0.0000 PR SENSOR POS XYZ/H    
8.                                                            END OF HEADER      
9. 19 03 02 00 00 00  946.0    8.5   93.0
10. 19 03 02 00 05 00  946.0    8.4   93.4
11. 19 03 02 00 10 00  946.0    8.4   93.4
12. 19 03 02 00 15 00  946.0    8.4   94.2
13. 19 03 02 00 20 00  946.0    8.5   93.1
14. 19 03 02 00 25 00  946.1    8.7   90.2
15. 19 03 02 00 30 00  946.2    8.4   92.0
16. 19 03 02 00 35 00  946.3    8.3   93.2
sh7euo9m

sh7euo9m1#

问题是无法将上述信息写入CSV文件。
这应该和向管道追加一个Export-Csv命令一样简单:

Get-ChildItem -Path C:\Logs\test *.log | 
    Select-Object -Property @(
        'FullName'
         @{ Name = "LineCount"; Expression = { 
             @(Get-Content -Path $_.FullName).Length
         }} 
    ) |
    Export-Csv output.csv -NoTypeInformation

请注意,我对Select-Object的更改只是为了提高代码可读性。
脚本读取所有行,有没有办法在某些行之后开始阅读行?给定文件need中的一个例子是从第9行(开始)到结束(可能是300)计数行。
您可以使用Select-Object -Skip n从开始跳过给定的行数。另一个改进是使用Measure-Object来计算项目数。在您当前的代码中,您必须将整个日志文件读入内存中的数组,然后才能计算行数。使用Measure-Object,文件将被流式传输,需要更少的内存进行处理。

(Get-Content -Path $_.FullName | Select-Object -Skip 8 | Measure-Object).Count

完整解决方案:

Get-ChildItem -Path C:\Logs\test *.log | 
    Select-Object -Property @(
        'FullName'
         @{ Name = "LineCount"; Expression = { 
             (Get-Content -Path $_.FullName | Select-Object -Skip 8 | Measure-Object).Count
         }} 
    ) |
    Export-Csv output.csv -NoTypeInformation

相关问题