我必须将文件从唯一字符串拆分为另一个唯一字符串到多个文本文件中,但不应将文件的某些部分写入新文件。文件大小为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
我会帮助你开始,但你需要使用我正在展示的内容并对其进行扩展。报告什么是和不起作用,我们将从那里继续。
这个单行将做几件事,可以扩展到完成你要求的。所以这就是发生的事情:
Get-Content
将读入文本文件中的数据并将其传输到Select-String
。Select-String
将寻找一个正则表达式模式(你可以玩它们here)并将它管道到foreach
循环。foreach
将遍历每个匹配的正则表达式并将其传递给New-Item
。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}
这是该脚本的结果: