【发布时间】:2020-01-03 00:01:44
【问题描述】:
我正在解析一个日志文件,其中前 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 placing contents into an Array Powershell 用于导入文件,假设它是空格分隔的,并且适用于前 7 个元素,但不确定之后的所有内容。
当然,我欢迎任何其他 PS 解决方案,例如我通过谷歌搜索看到的 [something]::SOMETHING 东西之一,它可能会更无缝地完成所有这些工作。
【问题讨论】:
标签: string powershell parsing logging