我的格式为txt file.which是一个巨大的文件。
有没有一种方法可以在表中使用PowerShell和商店ID,test,test1值来读取它?
文字档案:
---------------------------------------------------------------- ID : 1927 ---------------------------------------------------------------- ---------------------------------------------------------------- Mode="calculated" ---------------------------------------------------------------- Score test: 0.0403942318, test1 : 0.040394231826281 path: , path1: \\xyz\cbd ---------------------------------------------------------------- ID: 4653 ---------------------------------------------------------------- ---------------------------------------------------------------- Mode="calculated" ---------------------------------------------------------------- Score test: 0.003569656, test1 : 0.00356965601405712 path: , path1: \\xyz\cbd ---------------------------------------------------------------- ID: 5419 -------------------------
答案 0 :(得分:0)
由于您说您有一个大文件,您可能希望通过管道逐行处理它。一般结构如下所示:
Get-Content $inputFile | ForEach-Object {
# do stuff here
}
使用正则表达式匹配ID行并提取ID:
if ($_ -match '^ID : (\d+)$') {
$id = $matches[1]
# ...
} else {
# processing of non-ID lines goes here
}
记录的处理应在遇到ID行时开始,并在遇到下一个ID行或文件末尾时结束。
答案 1 :(得分:0)
我喜欢命名的捕获组:
## Q:\Test\2018\05\07\SO_50212799.ps1
$InputFile = '.\file.txt'
$NewTable = Get-Content $inputFile | ForEach-Object {
if ($_ -match '^ID[: ]+(?<ID>\d+)') { $ID = $Matches.ID }
if ($_ -match 'test[: ]+(?<Test>[0-9\.]+).*?test1[: ]+(?<Test1>[0-9\.]+)') {
[pscustomobject]@{
'ID' = $ID
'test' = $Matches.Test
'test1' = $Matches.test1
}
}
}
$NewTable
示例输出
> Q:\Test\2018\05\07\SO_50212799.ps1
ID test test1
-- ---- -----
1927 0.0403942318 0.040394231826281
4653 0.003569656 0.00356965601405712