解析未格式化的日志文件并将其导出为CSV

时间:2019-02-07 06:27:21

标签: powershell

我尝试了几件事,没有尝试使用正则表达式bcoz,对此我不太满意。日志文件看起来完全像这样。

timestamp :   2018121
streams   : Total    :  579   461   0   0   24     80   0    
ABC : 630                                           
A-1 : 98       
B-2 : 87      
C-3 : 0   
timestamp : 2018127    
stream : Total : 476   372   0   0   20   74   0    10    0  
ABC : 511  
B-2 : 77  
C-3 : 0  
D-4: 86  
timestamp : 2018128  
stream : Total : 76   37   0   0   20   74   0    10    0  
ABC : 517  
A-1 : 74  
C-3 : 9  
D-4 : 18  

我正在尝试以转置方式在csv中导出。对于流,我只想仅导出第一个值。

timestamp  streams      ABC      A-1      B-2   C-3  D-4
2018121      579        630        98     87    0    NULL
2018127      476        511      NULL     77    0    186
2018128       76        517        74     NULL  9    18

1 个答案:

答案 0 :(得分:0)

嗨,我认为您必须执行正确的逻辑代码,因为您的文件太小了,我已经工作了大约10分钟,您得到的结果是很小的代码

我在输入上做了一些更改,因为您在行流和其他流中……在行“'和其他”中?所以,我认为您的日志生成器存在问题。

输入:

timestamp :   2018121
streams   : Total    :  579   461   0   0   24     80   0    
ABC : 630                                           
A-1 : 98       
B-2 : 87      
C-3 : 0   
timestamp : 2018127    
stream : Total : 476   372   0   0   20   74   0    10    0  
ABC : 511  
B-2 : 77  
C-3 : 0  
D-4: 86  
timestamp : 2018128  
stream : Total : 76   37   0   0   20   74   0    10    0  
ABC : 517  
A-1 : 74  
C-3 : 9  
D-4 : 18 

某些代码:

$fileContent = Get-Content "C:\Temp\logTest.log"

$resultTab = @();

$beginIdentifierRows = "timestamp".ToLower();

for($i = 0; $i -lt $fileContent.Length; $i++){
    if($fileContent[$i].ToLower().StartsWith($beginIdentifierRows)){
        #Read all rows value strams to D-4 or other
        $A1 = "NULL";
        $B2 = "NULL";
        $C3 = "NULL";
        $D4 = "NULL";
        $streams= "NULL";
        $ABC = "NULL";
        $timestamp = $fileContent[$i].Split(":")[1];
        # Write-Host $fileContent[$i];
        $jj = 0;
        for($j = $i + 1; $j -lt ($i + 6); $j++){
            $lineContentJ = $fileContent[$j].Replace("  "," ").Replace("  "," ").Replace("  "," ").Replace("  "," ").Replace("  "," ");
            # $lineContentJ
            switch -Wildcard ($lineContentJ) { 
                "ABC *"{
                    # streams todo
                    $ABC = $lineContentJ.Split(":")[1];
                    break;
                }
                "stream*"{
                    # streams todo
                    $streams = $lineContentJ.Split(":")[2].Split(" ")[1];
                    break;
                }
                "A-1 *"{
                    # A-1 todo
                    $A1 = $lineContentJ.Split(":")[1];
                    break;
                }
                "B-2 *"{
                    # B-2 todo
                    $B2 = $lineContentJ.Split(":")[1];
                    break;
                }
                "C-3 *"{
                    # C-3 todo
                    $C3 = $lineContentJ.Split(":")[1];
                    break;
                }
                "D-4 *"{
                    # D-4 todo
                    $D4 = $lineContentJ.Split(":")[1];
                    break;
                }
            }$jj = $j;
        }
        $i=$jj;

        $array_name = [pscustomobject]@{timestamp = $timestamp; streams = $streams; ABC = $ABC; "A-1" = $A1; "B-2"=$B2; "C-3" = $C3; "D-4"=$D4} 

        $resultTab += $array_name;
    }
    #else {
        #Do nothing
    #}
}

$resultTab | ft;

结果:

timestamp    streams ABC    A-1  B-2  C-3 D-4 
---------    ------- ---    ---  ---  --- --- 
 2018121     579      630    98   87   0  NULL
 2018127     476      511   NULL  77   0   86 
 2018128     76       517    74  NULL  9   18