首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析未格式化的日志文件并将其导出到CSV

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

Stack Overflow用户
提问于 2019-02-07 14:27:21
回答 1查看 64关注 0票数 0

我已经尝试了几件事,没有尝试使用正则表达式bcoz,因为我对此并不擅长。日志文件看起来就像这样。

代码语言:javascript
复制
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中导出。对于流,我只想导出第一个值。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-07 17:35:06

您好,我认为您必须执行您的适当逻辑代码,因为您的文件是如此的tipycal,我有大约10分钟的工作,你有这个结果,它是小代码快照

我对输入做了一些更改,因为你有行中的流和其他流中的流……在‘’行和在其他‘’行?所以我认为你的日志生成器有问题。

输入:

代码语言:javascript
复制
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 

一些代码:

代码语言:javascript
复制
$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;

结果:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54567489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档