使用特定行拆分 CSV 文件

Split CSV files using a specific line

我想将以下 csv 分成两个 csv

StartOrder,1,SupplierName,
Line,2,12345,2,5,5.50,
Line,3,12345,3,6,5.20,
Line,4,12345,3,7,1.99,
EndOrder,5,booked as soon as possible to deliver.
StartOrder,6,SupplierName
Line,7,100015,2,5,5.50,
Line,8,100015,3,6,5.20,
Line,9,100015,3,7,1.99,
EndOrder,10,booked as soon as possible to deliver.

为了成为:

第一个文件

StartOrder,1,SupplierName,
Line,2,12345,2,5,5.50,
Line,3,12345,3,6,5.20,
Line,4,12345,3,7,1.99,
EndOrder,5,booked as soon as possible to deliver.

第二个文件

StartOrder,6,SupplierName
Line,7,100015,2,5,5.50,
Line,8,100015,3,6,5.20,
Line,9,100015,3,7,1.99,
EndOrder,10,booked as soon as possible to deliver.

我尝试过使用 GroupBy,但没有达到预期效果。

有什么帮助吗?

这是我会用正则表达式做的事情。

    $orders = (get-content -path C:\temp\orders.txt)    
    $orders = [string]::Join("`n",$orders)    # this is to make sure you keep your lines
    $output = [regex]::Matches($orders,'(?s)(StartOrder,(\d{0,}).*?deliver.)') # added regex option S

foreach($c in $output){                
    $order = $c.groups[2].value #order name that will serve as filename
    ""
    $c.groups[0].value # content of order
    $c.groups[0].value  | out-file C:\temp$order.txt -Force
}  

这将创建一个 1.txt 和一个包含所需内容的 6.txt。

EDIT :唯一的问题是它不保留输入。 -> 修复

正则表达式相当简单,关于正则表达式的更多细节:https://regex101.com/r/J0Xsu7/1

这将为您提供 1.txt 和

的文件
StartOrder,1,SupplierName,
Line,2,12345,2,5,5.50,
Line,3,12345,3,6,5.20,
Line,4,12345,3,7,1.99,
EndOrder,5,booked as soon as possible to deliver.

这将为您提供 6.txt 和

的文件
StartOrder,6,SupplierName
Line,7,100015,2,5,5.50,
Line,8,100015,3,6,5.20,
Line,9,100015,3,7,1.99,
EndOrder,10,booked as soon as possible to deliver.