gpt4 book ai didi

r - PowerShell:在大文件中替换NUL不起作用

转载 作者:行者123 更新时间:2023-12-03 00:31:40 24 4
gpt4 key购买 nike

我有一个巨大的文本文件(39 GB),最终我需要将其作为管道分隔文件读入R。但是,有很多NUL字符\0在R中无法读取。我正尝试在PowerShell中预先替换它们。
PowerShell代码:

Get-Content file.txt | foreach { $_ -replace '\\0' } | Out-File -Encoding UTF8 file_NEW.txt
我以为这可行,但是当我尝试在R中读取新文件时,字符串中出现 \0字符,并且出现此错误:
Error in vroom_(file, delim = delim %||% col_types$delim, col_names = col_names, : 
embedded nul in string: '||MORALES BELINDA F TRUST||\0||\0|0||PT||||33.824049|-118.192053||3655||N|WESTON|PL|||LONG BEACH|CA|908073855|C033||3655||N|WESTON|PL|||LONG BEACH|CA|908073855|C033|20111117|988||||||||20111027|20111110|TR|2|1527575||KINECTA FCU|KINECTA FCU|||MANHATTAN BEACH|CA|90266|047978|LAWYERS TITLE|03003|232000.00|20111027||CNV|TR|Y|10|20211201|||D|BGJT|V||115|21||0|0||0|||||Y|Y||\r\n06037|5054001029|5054-001-029|1|\0||BONILLA ...
为什么文件中仍然有NUL?任何帮助表示赞赏!尤其是因为这些功能需要花费很长时间才能运行。拜托,我只是想读取这个大文件。
万一R代码有错误,请注意,它是使用 vroomarrow包直接从 this post读取并创建拼花地板文件的。

最佳答案

  • vonPryz' helpful answer显示了-replace操作的直接问题:在单引号的PowerShell字符串('...')中,\字符。不需要转义为\\即可逐字传递到 -replace operator在幕后使用的.NET正则表达式引擎。
  • 因此,从PowerShell传递到.NET regex引擎时,'\0'足以表示NUL字符(Unicode字符,其code point0);或者,您可以使用"`0"(双引号expandable PowerShell string),其中`充当escape character

  • r2evans' helpful answer通过可选Rtools下载随附的标准Unix实用程序的Windows端口显示了一种替代解决方案,其中将输入文件传送到
    如果输入和输出文件都使用相同的字符编码,则tr -d '\0'可能提供最快的解决方案。

  • 在PowerShell Realm 中,使用 Get-Content及其默认的逐行处理以及如此大的输入文件在实践中会花费很长时间。
    虽然直接使用.NET API可能提供最终最快的解决方案,但使用 Get-Content -ReadCount参数提供了一个更简单,更PowerShell惯用的解决方案:
    Get-Content -ReadCount 1e6 file.txt | foreach { $_ -replace '\0' } | 
    Out-File -Encoding UTF8 file_NEW.txt
    -ReadCount 1e6一次读取一百万行( 1e6使用 exponential notation,即 10发挥 6的功能),并将它们作为数组传递给 ForEach-Object cmdlet(其内置别名为 foreach);由于 -replace运算符能够像LHS一样对值数组进行操作,因此可以立即对数组的所有元素执行 NUL替换。
    取决于输入文件中平均行的字节数,如果有更多可用内存,则可以向上调整此数字;如果有更多内存,则可以向下调整此数字。您可以使用的数字越大,命令完成的速度就越快。

    关于r - PowerShell:在大文件中替换NUL不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64296399/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com