我有一个日志文件(* .log),我希望对其进行分析和查询,如下所示:
行33043:17/07/2016; 13:26:45; GetMasterOrderNo;主订单号为:1117103907 for SoSupplierOrderNo,1117103907
行33048:17/07/2016; 13:26:45; AddAutoPurchHdr;无法保存PurchHdr记录-交货单编号1117103907(订单编号1117103907),供应商SupplierName(51)中已经使用了供应商订单号
行33049:17/07/2016; 13:26:45; ImportASN; ConvertASNFiles:无法导入GRN1171_0000700384_1117103907.xml。无法保存PurchHdr记录-交货单编号1117103907(订单编号1117103907),供应商SupplierName(51)中已经使用了供应商订单号。
我想做的是用标题分割每一行,如下所示:
...这样我就可以对此进行查询。
最好的方法是什么?
最佳答案
您可以使用正则表达式捕获这些字段:
$content = Get-Content 'your_log_path' -raw
$regex = 'Line\s+(\d+):\s+([^;]+);([^;]+);([^;]+);(.+)'
[regex]::Matches($content, $regex) | ForEach-Object {
[PsCustomObject]@{
Line = $_.Groups[1].Value
Date = $_.Groups[2].Value
Time = $_.Groups[3].Value
Type = $_.Groups[4].Value
Description = $_.Groups[5].Value
}
}
输出:
Line : 33043
Date : 17/07/2016
Time : 13:26:45
Type : GetMasterOrderNo
Description : Master Order No is : 1117103907 for SoSupplierOrderNo, 1117103907
Line : 33048
Date : 17/07/2016
Time : 13:26:45
Type : AddAutoPurchHdr
Description : Could not save PurchHdr record - The supplier order number has already been used in Delivery Note No.1117103907 (Order No.1117103907), Supplier SupplierName(51)
Line : 33049
Date : 17/07/2016
Time : 13:26:45
Type : ImportASN
Description : ConvertASNFiles: Failed to import GRN1171_0000700384_1117103907.xml. Could not save PurchHdr record - The supplier order number has already been used in Delivery Note
No.1117103907 (Order No.1117103907), Supplier SupplierName(51)
正则表达式:
Line\s+(\d+):\s+([^;]+);([^;]+);([^;]+);(.+)
关于regex - 解析自定义日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38891618/