首页 > 解决方案 > 通过 Powershell 进行日志解析 - 在第 n 个元素之后打印所有数组元素

问题描述

我正在解析一个以空格分隔的前 7 个元素的日志文件,然后是一条日志消息或句子。我知道足以在 PS 中四处走动,而且我每天都在学习更多,所以我不确定这是做到这一点的最佳方式,如果我没有利用一种更有效的方式,这将是第二天性,我深表歉意给你。我正在使用 -split(' ')[n] 逐行提取日志文件的每个字段。我能够很好地提取第一部分,因为它们是用空格分隔的,但我不确定如何将其余元素放到行尾。

$logFile=Get-Content $logFilePath
$dateStamp=$logfile -split(' ')[0]
$timeStamp=$logfile -split(' ')[1]
$requestID=$logfile -split(' ')[3]
$binaryID=$logfile -split(' ')[4]
$logID=$logfile -split(' ')[5]
$action=$logfile -split(' ')[6]

$logMessage=$logfile -split(' ')[?]

这不是我可以导入的 CSV。我更熟悉 bash 中的字符串操作,因此我能够成功地替换前 7 个元素中的空格,最后用 "," 替换:

#!/bin/bash

inputFile="/cygdrive/c/Temp/logfile.log"
outputFile="/cygdrive/c/Temp/test_log.csv"

echo "\"DATE\",\"TIME\",\"HYPEN\",\"REQUESTID\",\"BINARY\",\"PROC_NUMBER\",\"MESSAGE\"" > $outputFile

while read -a line
do
        arrLength=$(echo ${#line[@]})
        echo \"${line[0]}\",\"${line[1]}\",\"${line[2]}\",\"${line[3]}\",\"${line[4]}\",\"${line[5]}\",\"${line[@]:6:$arrLength}\"
done < $inputFile >> $outputFile

您能否帮助打印从位置 n 到末尾的数组元素,或者在 PS 中适当地替换空格,以便我有一个可以导入的 CSV?只是试图避免在 bash 中转换它,然后在 PS 中导入它的两步过程,但我仍在研究。我确实找到了这篇文章Parsing Text file and puts contents into an Array Powershell for importing the file 假设它是空格分隔的并且适用于前 7 个元素,但不确定之后的所有内容。

当然,我欢迎任何其他 PS 解决方案,例如我通过谷歌搜索看到的 [something]::SOMETHING 东西之一,它可能会更无缝地完成所有这些工作。

标签: stringpowershellparsinglogging

解决方案


您可以指定拆分字符串的最大子字符串数,如下所示:

$splittedRow = $logfile.split(' ',8)

$dateStamp=$splittedRow[0]
$timeStamp=$splittedRow[1]
$requestID=$splittedRow[3]
$binaryID=$splittedRow[4]
$logID=$splittedRow[5]
$action=$spltttedRow[6]

$logMessage=$splittedRow[7]

推荐阅读