使用PowerShell将文件拆分为多个文本文件

问题描述 投票:-4回答:1

我必须将文件从唯一字符串拆分为另一个唯一字符串到多个文本文件中,但不应将文件的某些部分写入新文件。文件大小为6 MB,主要包含名称和数字,如下所示。

文件示例:

WD2GDLPR
Jack        123545
Peter       12564

HR4MJUTL
Mark        4489
Alex        47889

JP3MFRLES
Jane        5632
Toby        48685

1STRHD17-4
Jake        47896
Jess        48896

文本文件的名称应该是如下所示的唯一字符串。

(输出应该如何)

WD2GDLPR.txt包含:



WD2GDLPR
Jack        123545
Peter       12564

JP3MFRLES.txt包含:

JP3MFRLES
Jane        5632
Toby        48685

当前代码:


    $Path = "C:\Users\Spoderman\Desktop\Testing"
    $InputFile = (Join-Path $Path "bigfile.txt")
    $Reader = New-Object System.IO.StreamReader($InputFile)

    While (($Line = $Reader.ReadLine()) -ne $null) {
        If ($Line -match "WD2GDLPR") {
          $OutputFile = $matches[1] + "WD2GDLPR.txt"
    }
        If ($Line -match "JP3MFRLES") {
          $OutputFile = $matches[1] + "JP3MFRLES.txt"
    }

    Add-Content (Join-Path $Path $OutputFile) $Line
    }


上面的代码给了我这个输出,但它应该看起来像第一个例子:WD2GDLPR.txt包含

WD2GDLPR
Jack        123545
Peter       12564

HR4MJUTL
Mark        4489
Alex        47889

JP3MFRLES.txt含有

JP3MFRLES
Jane        5632
Toby        48685

1STRHD17-4
Jake        47896
Jess        48896
powershell
1个回答
0
投票

我会帮助你开始,但你需要使用我正在展示的内容并对其进行扩展。报告什么是和不起作用,我们将从那里继续。

这个单行将做几件事,可以扩展到完成你要求的。所以这就是发生的事情:

  1. Get-Content将读入文本文件中的数据并将其传输到Select-String
  2. Select-String将寻找一个正则表达式模式(你可以玩它们here)并将它管道到foreach循环。
  3. foreach将遍历每个匹配的正则表达式并将其传递给New-Item
  4. 然后New-Item将获得该匹配并创建一个.txt文件。

我建议做的是找出一种方法来再次遍历数据并在正则表达式匹配后获取所需的行,然后将该数据(Add-Content)附加到正确的.txt文件中。你总是可以修补单行,并在抓住正则表达式匹配的同时获取该信息。有各种方法可以做到这一点。只需逻辑思考一下,写出一些关于需要发生什么的伪代码,然后开始插入PowerShell Cmdlet以实现它。

这是让你前进的PowerShell脚本(它是一行):

Get-Content '.\bigdata.txt' | Select-String -Pattern '([A-Z])\w+' | foreach {$_.Matches.Value | New-Item ".\$($_.Matches.Value).txt" -Type File}

这是该脚本的结果:

image.png

© www.soinside.com 2019 - 2024. All rights reserved.