我正在尝试提取数据:
第1行=报表ID +第2行=“机器编号” +第3行=脱机
然后Out-File
到一个新文件。
样本数据
Report ID page1 Machine no 1234 OTHERS 12 offline 12 OTHERS 23 offline 37 OTHERS 89 offline 65
经过处理后,我正在寻找的结果如下所示:
Report ID page 4 Machine no 1234 offline 12 offline 37 offline 65
答案 0 :(得分:0)
您可以将Select-String
cmdlet与-Context
参数一起使用来搜索文件,然后选择要从搜索中获取多少行上下文信息。
例如,如果我们采用您的输入文件并将其存储在名为$input
的变量中,如下所示:
$inputFile= Get-Content C:\Path\To\YourFile.txt
$inputFile| Select-string 'machine no'
>Machine no 1234
然后我们可以找到短语“ offline”的匹配项:
$inputFile| Select-String offline -Context 0,1
这表示我希望您搜索单词“ offline”,并给我零行,然后再一行,给我们以下输出:
> offline
12
> offline
37
> offline
65
我们可以将所有这些放在一起来构建它,并生成一个看起来像这样的新输出文件。
$out= ''
$out += $inputFile| Select-string 'machine no'
$out += "`n"
$out += $inputFile| Select-String offline -Context 0,1 | ForEach-Object {$_.Context.DisplayPostContext}
#Resulting file would look this, just the name of the machine and then the number of each offline...uh, whatever it is.
Machine no 1234
12 37 65
如果我是您,我将改编此流程以制作PowerShell对象和属性,如下所示:
$Report = [pscustomobject]@{ID='';MachineNo='';OfflineMembers=@()}
$Report.ID = ($inputFile | select-string page -Context 0 ).ToString().Split('page')[-1]
$Report.MachineNo = ($inputFile | Select-string 'machine no').ToString().Trim().Split()[-1]
$Report.OfflineMembers = $inputFile | Select-String offline -Context 0,1 | ForEach-Object {
[pscustomobject]@{Value='Offline';ID=$_.Context.DisplayPostContext.Trim()}
}
>$Report
ID MachineNo OfflineMembers
-- --------- --------------
1 1234 {@{Value=Offline; ID=12}, @{Value=Offline; ID=37}, @{Value=Offline; ID=65}}
$Report.OfflineMembers
Value ID
----- --
Offline 12
Offline 37
Offline 65