如何使用powershell

时间:2018-05-07 11:09:28

标签: powershell

我的格式为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

-------------------------

2 个答案:

答案 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