微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与内存有关的行内将文本追加到第二行的末尾

如何解决与内存有关的行内将文本追加到第二行的末尾

我正在处理一个看起来像这样的文件

Hello.txt

mary had
a little
whose fleece was white as sNow

我希望它看起来像这样(强调星号):

mary had
a little **lamb**
whose fleece was white as sNow

简单的方法是将vim插入文件添加该单词,但这是不可能的。第三行实际大小为3GB。无法正确加载。

接下来,我尝试使用sed:

sed -i '' '2s/$/ lamb/g' Hello.txt

好吧,看一下,这可以在玩具上工作……但不适用于我的实际情况。当我在文件挂钩上运行此文件时,我得到:

sed: hg38.index: Cannot allocate memory

请注意,我正在使用-i,这是因为当我使用Bash时,我正在OSX上。

我尝试从this SO question开始awk。但是看来Awk没有内联功能。有什么方法可以执行此操作而不必等待整个文件都加载到内存中吗?谢谢。

解决方法

您可以尝试在childclass1 = MyModule.ChildClass1(dataset) childclass1.minimize() childclass2 = MyModule.ChildClass2(dataset) childclass2.minimize() 中执行此操作:

ex

这是OSX上ex -sc '2s/$/ lamb/' -cx Hello.txt ex之间对于200MB输入文件的时间比较。

sed

以下是1.9GB输入文件的时间:

time ex -sc '2s/$/ lamb/' -cx big.txt

real    0m7.454s
user    0m6.519s
sys 0m0.831s


time sed -i '' '2s/$/ lamb/' big.txt

real    0m34.016s
user    0m32.913s
sys 0m0.722s
,
{ sed '2{s/$/ lamb/;q;}' Hello.txt; tail -n +3 Hello.txt; } > file.tmp

这是M.NejatAydin为我工作的解决方案。它花了15分钟才能运行,但仍然有效。检查head和tail -c,我可以看到文件的第一部分和最后一部分都保留了,因此我只能假设第三行的其余部分都可以。

这很丑陋,但是据我所知,第一部分打印前两行并将文本附加到第二行,然后tail命令输出文件的其余部分。然后将两者都通过管道传输到tmp文件。如果有人想澄清我,请告诉我。

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。