【问题标题】:win cmd: remove whitespace > not enough storage to process this commandwin cmd: remove whitespace > 没有足够的存储空间来处理这个命令
【发布时间】:2017-12-15 18:05:43
【问题描述】:

我有一个很长(数百万行)的纯 txt 数据表。看起来像这样:

cellnumber     x-coordinate     y-coordinate     z-coordinate      temperature 
         1 -6.383637190E-01  2.408539131E-02 -5.244855285E-01  3.081549136E+02 
         2 -6.390314698E-01  2.286404185E-02 -5.245100260E-01  3.081547595E+02 
         3 -6.381718516E-01  2.373264730E-02 -5.236577392E-01  3.081547591E+02 
         4 -6.360489130E-01  2.259869128E-02 -5.245736241E-01  3.081547591E+02 
         5 -6.369081736E-01  2.253472991E-02 -5.236831307E-01  3.081547591E+02 
         6 -6.382256746E-01  2.215057984E-02 -5.237988830E-01  3.081547591E+02 
         7 -6.381900311E-01  2.126700431E-02 -5.245448947E-01  3.081547591E+02 
         8 -6.373924613E-01  2.117809094E-02 -5.238834023E-01  3.081547591E+02 

我目前只有 win 命令行,需要去掉开头的空格(随着单元格数的增加,它们的长度不是恒定的)以便我得到

cellnumber     x-coordinate     y-coordinate     z-coordinate      temperature 
1 -6.383637190E-01  2.408539131E-02 -5.244855285E-01  3.081549136E+02 
2 -6.390314698E-01  2.286404185E-02 -5.245100260E-01  3.081547595E+02 
3 -6.381718516E-01  2.373264730E-02 -5.236577392E-01  3.081547591E+02 
4 -6.360489130E-01  2.259869128E-02 -5.245736241E-01  3.081547591E+02 
5 -6.369081736E-01  2.253472991E-02 -5.236831307E-01  3.081547591E+02 
6 -6.382256746E-01  2.215057984E-02 -5.237988830E-01  3.081547591E+02 
7 -6.381900311E-01  2.126700431E-02 -5.245448947E-01  3.081547591E+02 
8 -6.373924613E-01  2.117809094E-02 -5.238834023E-01  3.081547591E+02 

我可以寻求解决方案吗?我没有头绪,对此我没有真正的经验。谢谢!

我猜 TrimStart 可能是我的朋友。

编辑:我把这个放在一起:

@ECHO OFF

set "victim=testJana.txt"

SETLOCAL

FOR /F "tokens=*" %%A IN (%victim%) DO (
    IF NOT "%%A"=="_" ECHO %%A>>%victim%_edited.txt
)

ENDLOCAL

pause

它适用于较小的文件,但我收到了消息

not enough storage to process this command

知道如何处理吗?

【问题讨论】:

  • 当然。是类似的,谢谢。我现在应该删除吗?您对“没有足够的存储空间来处理此命令”问题有任何想法吗?谢谢!
  • 您可以随时将输入文件拆分为更小的文件
  • @Jewenile 试试 powershell 的方式,如果更好的话
  • 不,我认为编辑很好,只需再次编辑以参考原始 SO 答案,这样用户就会知道您使用了没有成功的解决方案。不幸的是,除了拆分文件之外,我不知道存储问题。你有足够的磁盘空间吗?

标签: windows batch-file cmd removing-whitespace


【解决方案1】:

我建议使用powershell:

一、二、三编辑:在data.txt文件所在目录和powershell.exe shell中执行:

(最好在其他帖子中通过@lit 添加-ReadCount

Get-Content -ReadCount 500 -Path .\path_to_your_source\data.txt | % {$_ -replace " +", " "} | Set-Content -Path .\path_to_our_output\data_no_additional_spaces.txt

为什么 -ReadCount 有意义?在这里,每次通过管道运行需要 500 行。

这是来自Microsoft页面的信息)

-读取计数

指定多少行内容通过管道发送 时间。默认值为 1。值 0(零)发送所有 一次内容。

这个参数不会改变显示的内容,但是会 影响显示内容所需的时间。作为价值 ReadCount 增加,返回第一行所需的时间 增加,但操作的总时间减少。这个可以 在非常大的项目中产生明显的差异。

读取数据,替换所有空格,然后将数据保存到data_new.txt

此答案适用于powershell.exe shell,而不是您通常运行*.bat 文件的cmd.exe。在 powershell 中,您有名为 *.ps1 的脚本。

如果您将上述命令存储在trim_space.ps1 中,然后启动它(您需要将脚本与正在转换的数据放在同一目录中):

powershell.exe -ExecutionPolicy Bypass &'C:\path_to_script\trim_space.ps1'。你会看到它被执行了。

第四次编辑

解决您的问题:

它适用于较小的文件,但我收到的消息还不够 存储来处理这个命令

知道如何处理吗?

您必须按您现在不在批处理文件中的块来处理它。你只是到了耗尽所有线程内存的地步,它自然会失败。您需要有一种方法可以让您限制像-Readcount 这样一次处理的行块。在批处理文件中,我想可以从另一个只处理有限部分文件的批处理文件中调用一个批处理文件。

【讨论】:

  • 谢谢。但这无济于事。运行 bat 文件后,它只是闪烁并且.. 目录中没有任何内容。
  • 您可能遗漏了一些东西。你是用powershell.exe 代替cmd.exe 开始的吗?我已经在示例数据上对其进行了测试,并且可以正常工作。
  • 没有。我只是将它保存到一个bat文件并双击它...我以为powershell会自动调用...
  • 我想你应该注意到答案是具体的,因为它是powershell 代码而不是bat-file
  • @Jewenile 那行不通。您必须运行 powershell.exe 并在命令提示符下运行 data.txt 目录中的命令。 (powershell.execmd.exe 完全不同的 shell)
【解决方案2】:

使用 PowerShell,您可以限制管道中一次处理的数据量。

Get-Content -Path .\testJana.txt -ReadCount 1000 |
    ForEach-Object { $_ -replace '^ +', '' } |
    Out-File -FilePath .\testJana_edited.txt -Encoding ASCII

如果您想从 cmd.exe shell 运行它,请将上面的 PowerShell 代码放入名为 sourcelimit.ps1 的文件中,并在 .bat 脚本文件中使用以下内容。

powershell -NoProfile -File .\sourcelimit.ps1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 2018-08-30
    • 2012-05-14
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多