根据列值将一个文件拆分成多个文件

Split a file into multiple files based on column value

我想根据内容将下面的文件拆分成多个文件;

输入文件:

    HC05361         3036690000002020072814093990 R
    DC05361         00100001CD  03113      075992733625
    HC05362         3036690000002020072814103991 R
    DC05362         00100001CD  03113      075992733625
    HC05615         3024173024172020091408223795 R
    DC05615         00100001NDL 00016      856115004682
    DC05615         002000011   295013     825646252404
    DC05615         003000011   295617     825646248490

输出文件:

文件 1:

    HC05361         3036690000002020072814093990 R
    DC05361         00100001CD  03113      075992733625

文件 2:

    HC05362         3036690000002020072814103991 R
    DC05362         00100001CD  03113      075992733625

文件 3:

    HC05615         3024173024172020091408223795 R
    DC05615         00100001NDL 00016      856115004682
    DC05615         002000011   295013     825646252404
    DC05615         003000011   295617     825646248490

这对我有用,但我认为您可能需要提供更多信息。

喜欢...

  • 您希望文件名是什么?
  • 您对数据的了解
    • 例如,您是否总是希望在以 HC 开头的行上进行拆分?第一列中的值是否始终采用 HC#####?
    • 的形式

做出一些假设,这是您可以执行的操作的基本示例。

这将遍历文件中的每一行。如果该行以 HC##### 开头,则它将该行及其后的每一行输出到具有该名称的文件中。当它达到新的 HC##### 值时,它会将其更改为文件名:

$data = Get-Content .\sample.txt
foreach ($line in $data) {
    if ($line -match '^HC[0-9]+') {
        $fileName = "$($Matches[0]).txt"
    }
    Add-Content -Value $line -Path $fileName
}

这是假设第一行总是为我们提供一个文件名。

还假设您要拆分以 HC

开头的行

它也不执行任何类型的异常处理。