我尝试了几件事,没有尝试使用正则表达式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
答案 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