You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改PowerShell脚本:基于END OF HEADER统计日志有效行数

问题与解决方案

问题描述

原PowerShell脚本用于遍历指定目录下的子目录,读取每个.log文件的行数(固定跳过前8行头部)并将结果写入对应子目录名称的CSV文件。但日志文件的头部行数不固定,会根据内容扩展到11行或15行,且所有文件的头部均以文本END OF HEADER结尾,导致固定跳过8行的统计方式出错。需求改为仅统计END OF HEADER之后的有效数据行数。

原脚本

$targDir = "C:\Logs\15Sec\Ref.Data\Month\";
$subDir = $(Get-ChildItem "$targDir" –Directory );
foreach($sub in $subDir) {
    Get-ChildItem -Path $sub –Recurse *.log | 
    Select-Object -Property @(
        'FullName'
         @{ Name = "LineCount"; Expression = { 
             (Get-Content -Path $_.FullName | Select-Object -Skip 8 | Measure-Object).Count
         }} 
    ) |
    Export-Csv "C:\test\$($sub.Name).csv" -NoTypeInformation
}

日志文件头部示例

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

修改后的脚本

$targDir = "C:\Logs\15Sec\Ref.Data\Month\";
$subDir = Get-ChildItem "$targDir" –Directory;
foreach($sub in $subDir) {
    Get-ChildItem -Path $sub –Recurse *.log | 
    Select-Object -Property @(
        'FullName'
         @{ Name = "LineCount"; Expression = { 
             $lines = Get-Content -Path $_.FullName
             # 定位"END OF HEADER"所在行的行号
             $headerEndLine = ($lines | Select-String "END OF HEADER").LineNumber
             # 跳过头部结束行及之前的所有行,统计剩余行数
             ($lines | Select-Object -Skip $headerEndLine).Count
         }} 
    ) |
    Export-Csv "C:\test\$($sub.Name).csv" -NoTypeInformation
}

关键改动说明

  • 动态定位头部结束位置:通过Select-String查找包含END OF HEADER的行,获取其行号,替代固定跳过8行的逻辑。
  • 优化IO效率:将文件内容一次性读取到变量$lines中,避免重复读取文件。
  • 精准统计数据行:使用Select-Object -Skip $headerEndLine直接跳过头部所有行(包括END OF HEADER所在行),仅统计后续有效数据的行数。

内容的提问来源于stack exchange,提问作者Hawfinch Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:20:29