string - 通过 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 东西之一,它可能会更无缝地完成所有这些工作。
解决方案
您可以指定拆分字符串的最大子字符串数,如下所示:
$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]
推荐阅读
- angular - 使用 ng build 部署时,GridComponent 不起作用
- javascript - 顶部对齐正方形内的文本
- html - 设计Mobile First时如何处理`display:none`?
- linear-programming - 不同尺寸箱子的卡车优化
- azure - Azure AD Lonin 的 SAML IDP 然后重定向问题
- javascript - 检测 Javascript 卡在哪里的技术?
- java - 尝试使用 XML 单元比较两个 xml 时线程“主”中的异常
- c# - 如何使用 JKS / PFX 证书在 Visual Studio 2019 中使用 SAOP WSDL(C# Dotnet Framework 4.8)
- spacy - 在 entity_ruler 中引用其他实体
- xamarin - Xamarin 移动应用程序的 CI/CD - 已弃用的 AppCenter 和 Bitrise 的替代品