首页 > 解决方案 > PowerShell如何根据字符串中值的变化将文本文件拆分为多个

问题描述

我是 Powershell 的新手,我需要帮助来解决使用 PowerShell 可以非常快速地给出结果(执行)的要求。

我有一个文本文件,其中包含大约 500000 条记录和大约 100 个分隔 (|) 字段的数据。第一个字段包含 YYYYMMDD 格式的日期。每次该值发生变化时,我都需要拆分大文件。例如,如果文件有大约 100 个不同的日期,则应将文件拆分为 100 个文件。

我提供了一组数据样本供参考,只有 3 个字段。test1.txt 中的文件名。生成的文件应命名为 test1_00001.txt、test1_00002.txt、......、test1_00100.txt。

假设输入文件 test.txt 包含以下记录:

20190227|00001|VALUE1  
20190227|00001|VALUE1  
20190227|00001|VALUE2  
20190227|00002|VALUE3  
20190228|00005|VALUE3  
20190228|00001|VALUE2  
20190228|00002|VALUE1  
20190301|00001|VALUE1  
20190301|00300|VALUE7  
20190301|00004|VALUE7  
20190301|00004|VALUE1  
20190301|00002|VALUE5  

结果文件 test_00001.txt 应包含以下记录:

20190227|00001|VALUE1  
20190227|00001|VALUE1  
20190227|00001|VALUE2  
20190227|00002|VALUE3  

结果文件 test_00002.txt 应包含以下记录:

20190228|00005|VALUE3  
20190228|00001|VALUE2  
20190228|00002|VALUE1  

结果文件 test_00002.txt 应包含以下记录:

20190301|00001|VALUE1  
20190301|00300|VALUE7  
20190301|00004|VALUE7  
20190301|00004|VALUE1  
20190301|00002|VALUE5  

标签: powershellfiletextsplitkey-value

解决方案


为什么不使用日期作为新文件名的一部分?

Get-Content .\test1.txt | %{Add-Content -path "test$($_.split('|')[0]).txt" -Value $_}

您可以尝试使用Get-Content-ReadCount 参数来加快速度。


推荐阅读