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

时间:2017-12-20 12:02:29

标签: powershell

我必须将文件从唯一字符串拆分为另一个唯一字符串到多个文本文件中,但不应将文件的某些部分写入新文件。文件大小为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

1 个答案:

答案 0 :(得分:0)

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

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

  1. Get-Content将读入文本文件中的数据并将其传递给Select-String
  2. Select-String会查找正则表达式模式(您可以使用它们here)并将其传递给foreach循环。
  3. foreach将遍历每个匹配的正则表达式,并将其传递给New-Item
  4. New-Item将接受该匹配并创建.txt文件。
  5. 我建议做的是找出一种方法来重新遍历数据并在正则表达式匹配后获取所需的行,然后将该数据(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