代码之家  ›  专栏  ›  技术社区  ›  TomG

使用powershell处理大容量数据文件

  •  0
  • TomG  · 技术社区  · 6 年前

    我正在尝试对4GB数据文件执行替换操作。 但由于内存异常,我甚至无法读取此文件。 下面的命令给出一个内存错误。

    $edwfile = (Get-Content C:\Users\tomgeorg\Desktop\edw_ord_extr_3x_SIQP_20181021.182305\edw_ord_extr_3x_SIQP_20181021.182305.dat -Raw ) 
    

    有没有其他处理大文件的命令或技巧。

    我想在文件的每一行运行以下替换模式。基本上我想删除所有不需要的特殊字符。

    -replace  "[$([char]0x00)-$([char]0x09)$([char]0x0B)-$([char]0x1F)$([char]0x7F)-$([char]0xFF)]","?"
    

    系统详细信息

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   Maximilian Burszley    6 年前

    假设您希望一次只能在一条线上工作,则需要将管道用于您的任务:

    $path = '~\Desktop\edw_ord_extr_3x_SIQP_20181021.182305\edw_ord_extr_3x_SIQP_20181021.182305.dat'
    Get-Content -Path $path | ForEach-Object {
        # do something line-by-line with the file
    } | # -> do something else with the output
    

    不知情 什么 你在处理文件,很难给出更完整的答案。

        2
  •  2
  •   Mike Twc    6 年前

    下面是带流的样品溶液。它逐行读取文件,然后将更新的行添加到新文件中。

    $reader = [System.IO.StreamReader]"C:\temp\OriginalFile.txt"
    $writer = [System.IO.StreamWriter]"C:\temp\UpdatedFile.txt"
    
    while (!$reader.EndOfStream) {
    
    $writer.WriteLine(($reader.ReadLine() -replace '\|', ";"))
    
    }
    
    $reader.Close()
    $writer.Close()