Powershell:使用字符串匹配条件将单个文件拆分为多个文件

2024-01-02

我有一个包含 1GB 数据的文件。该数据实际上是数十个或数千个单独的迷你文件。 我需要提取每个单独的文件并将它们放入自己单独的不同文件中。 所以本质上,我需要从单个文件变成 30K+ 单独的文件。

这是“我的文件”的示例。

文件名 1 版本 1 32 D
87年10月15日 87年9月29日
编制 ?????
修订者:???
描述 用户域
记录文件名 1 版本 1 D 后缀 -4541
100 05 ST-CTY-CDE-FMHA-4541 显示器
200 10 ST-CDE-FMHA-4541 9(2) 显示
300 10 CTY-CDE-FMHA-4541 9(3) 显示器
400 05 NME-CTY-4541 X(20) 显示器
500 05 最后更新日期 4541 9(06) 显示
600 05 FILLER X 显示 1 报告编号08
数据字典报告器 REL 17.0 09/23/21
第 2 页 报告 008
记录报告

-**************************************************** ****************************************************** ********************************** 记录 记录 ---- 日期 ----
记录名称长度构建器类型 事件已更新已创建
****************************************************** ****************************************************** ********************************** 0
文件名2 版本 1 176 D
98年3月9日 84年2月21日
编制 ??????
修订者:????
定义

我需要根据位置 68、69 和 70 中 VER 的匹配来拆分文件。我还需要为每个文件唯一命名。该信息存储在同一行的位置 2-9 中。在上面的示例中,该字符串是“FILENAM1”和 FILENAM2”。

因此,仅使用上面的示例,我将创建两个输出文件,它们将被命名为 FILENAM1.txt 和 FILENAM2.txt。

由于我需要拆分超过 30K 个文件,因此手动执行此操作是不可能的。

我确实有一个脚本可以将一个文件拆分为多个文件,但它不会按位置搜索字符串。

有人能帮助我吗?

这是不起作用的脚本。希望我能屠宰它并得到一些有效的结果......

$InputFile = "C:\COPIES.txt"
$Reader = New-Object System.IO.StreamReader($InputFile)
$OPName = @()
While (($Line = $Reader.ReadLine()) -ne $null) {
    If ($Line -match "VER"(67,3)) {
        $OPName = $Line.(2,8)
        $FileName = $OPName[1].Trim()
        Write-Host "Found ... $FileName" -foregroundcolor green
        $OutputFile = "$FileName.txt"
    }    
    Add-Content $OutputFile $Line
}
                        

先感谢您,

-Ron


我建议使用switch https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Switch语句,它通过以下方式提供方便快捷的逐行读取文件-File and regex https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Regular_Expressions- 匹配通过-Regex:

$streamWriter = $null
switch -CaseSensitive -Regex -File "C:\COPIES.txt" {
  '^.(.{8}).{58}VER' { # Start of a new embedded file.
    if ($streamWriter) { $streamWriter.Close() } # Close previous output file.
    # Create a new output file.
    $fileName = $Matches[1].Trim() + '.txt'
    $streamWriter = [System.IO.StreamWriter] (Join-Path $PWD.ProviderPath $fileName)
    $streamWriter.WriteLine($_)
  }
  default { # Write subsequent lines to the same file.
    if ($streamWriter) { $streamWriter.WriteLine($_) }
  }
}
$streamWriter.Close()

Note: A solution using the .Substring() method of the [string] type is possible too, but would be more verbose.

  • The ^.(.{8}).{58}正则表达式的部分匹配每行的前 67 个字符,同时通过捕获组捕获(基于 1)第 2 至 9 列(文件名)中的字符(.{8}),这使得捕获的文本在索引中可用[1] of the 自动的$Matches多变的 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Automatic_Variables#matches. The VER然后,正则表达式的一部分确保该行仅在以下情况下匹配VER位于列位置 68 处。

  • 为了高效创建输出文件,[System.IO.StreamWriter] https://learn.microsoft.com/en-US/dotnet/api/System.IO.StreamWriter使用实例,比逐行快得多Add-Content来电。此外,与Add-Content您必须确保目标文件尚不存在,因为现有内容将被附加到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell:使用字符串匹配条件将单个文件拆分为多个文件 的相关文章

随机推荐

  • 找出堆内存损坏的位置

    我知道已经有很多类似的问题和答案存在 但我无法解决我的问题 在我的大型应用程序堆中 某处已损坏 我无法找到它 我也使用过像 gflags 这样的工具 但没有运气 我在以下示例上尝试了 gflags 该示例故意损坏了堆 char pBuffe
  • C# - 匿名委托

    就像匿名方法一样 我使用 delegate 关键字声明的委托是匿名委托吗 namespace Test public delegate void MyDelegate class Program static void Main strin
  • Xcode 错误“无法安装应用程序...[appname].app 需要 [devicename] 不支持的“z”功能

    我正在编写 Wenderlich 教程 今天收到一条新错误消息 我还没有看过这个 并且似乎无法通过常规搜索找到任何答案 当尝试在设备 运行 9 1 的 iPhone 6 iPhone 5 或 iPad Mini 上构建和运行时 我收到以下错
  • PIL:DLL加载失败:找不到指定的过程

    我已经开始使用 Python 处理图像 并且想开始使用 PIL Pillow 为了安装它 我跑了pip install Pillow 安装时 之前没有安装PIL 我还尝试卸载并重新安装它 以及使用pip3 install Pillow 当我
  • 为什么cygwin下的git要求输入密码?

    我正确指向 ssh 配置中的密钥文件 cat ssh config Host
  • PHP - 复选框组

    我有一个需要发布的表单中的复选框组
  • 找不到 PHP 二进制文件

    每次我保存我的 phpSublime 中的文件会弹出 在 php bin usr local bin php 处找不到 PHP 二进制文件 我已经做了我所知道的一切 到目前为止我正在研究答案 对我来说 是 phpfmt 扩展找不到 php
  • 如何使用 Mono.Cecil 注入对 System.Object.Equals 的调用?

    使用 Mono Cecil 我想重写以下属性 public string FirstName get return FirstName set FirstName value to this public string FirstName
  • 将 C# 枚举定义序列化为 Json

    在 C 中给出以下内容 Flags public enum MyFlags None 0 First 1 lt lt 0 Second 1 lt lt 1 Third 1 lt lt 2 Fourth 1 lt lt 3 有没有现成的方法S
  • 如何以 OOP 风格使用 TensorFlow?

    具体来说 当使用 TensorFlow 以 OOP 风格构建模型时 我应该在哪里构建图 我应该在哪里启动会话来运行图表 此案例的最佳实践是什么 In TensorFlow 力学 101 https www tensorflow org tu
  • ES6 fetch 函数返回未定义[重复]

    这个问题在这里已经有答案了 我有以下代码 function fetchDemo var result fetch countriesUrl then function response return response json then f
  • 画布未在reactjs中渲染

    我想在我正在开发的网站上添加画布 但我似乎可以理解为什么画布没有显示 可能是什么问题 以下是我尝试过的 当我将鼠标悬停在标题上时 它显示画布正在更新 但屏幕上没有显示任何内容 画布 jsx export class Canvas exten
  • 在 R 中按模式重命名列

    我想按特定模式重命名数据框中的所有列 我的输入 Log NE122 Log NE244 Log NE144 0 33 0 98 1 0 我的预期输出 NE122 NE244 NE144 0 33 0 98 1 0 Cheers 您可以使用正
  • 在 Visual Studio 中开发 Azure Function 时存储帐户无效

    我正在使用 C 在 Visual Studio 中开发 Azure Function 我在位于代理后面的开发机器上本地运行它 但是不断收到此错误 Exception binding parameter Invalid storage acc
  • 打字稿路径无法解析

    Here https github com oleersoy typescript pathsGithub MCVE 显示了一个问题 npm run compile显示错误 我正在尝试这样做 import Todo from test 但这
  • 检测用户是否在颤动上按下 home / tab 的代码?

    是否有任何代码可以检测用户是否按下了 home tab 我想让我的音乐在按下时暂停 通过添加观察者来跟踪生命周期事件WidgetsBinding然后在应用程序暂停时暂停音乐 你可以看看this https github com flutte
  • 核心数据executeFetchRequest抛出NSGenericException(枚举时集合发生了变化)

    我正在使用 Core Data 开发 iPhone 应用程序 所有用户数据应与我们的服务器同步 为此 我创建了 NSOperation 的子类 它从我们的 Web 服务加载新数据并创建相应的托管对象 为了维护它们之间的关系 每个对象都使用远
  • 哪个是最好的 git 托管软件? - Gitolite vs. Gitlab vs. Gitorius [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在寻找适合多个用户的 git 托管环境 因此我搜索了之间的比较Gitolite Gitlab and Gitorius 但我没有得到任何有用
  • YAML:YAML 中的字符串需要引号吗?

    我正在尝试编写一个用于 Rails 项目国际化的 YAML 字典 不过我有点困惑 因为在某些文件中我看到字符串用双引号引起来 而在某些文件中则没有 需要考虑的几点 示例1 https github com plataformatec dev
  • Powershell:使用字符串匹配条件将单个文件拆分为多个文件

    我有一个包含 1GB 数据的文件 该数据实际上是数十个或数千个单独的迷你文件 我需要提取每个单独的文件并将它们放入自己单独的不同文件中 所以本质上 我需要从单个文件变成 30K 单独的文件 这是 我的文件 的示例 文件名 1 版本 1 32