gpt4 book ai didi

linux - 在 linux 命令行中替换大文件第一行中字符串的最快方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:52 24 4
gpt4 key购买 nike

我在 Linux 机器上有一个巨大的纯文本文件 (~500Gb)。我想替换标题行(文件的第一行)中的一些字符串,但我所知道的所有方法似乎都很慢且效率低。

示例文件:

foo apple cat
1 2 2
2 3 4
3 4 6
...

预期的文件输出:

bar apple cat
1 2 2
2 3 4
3 4 6
...

sed:

sed -i '1s/foo/bar/g' file

-i 可以就地更改文件,但是这个命令会在磁盘上生成一个 tmp 文件并使用 tmp 文件替换原来的文件。 io浪费时间。


vim:

ex -c '1s/foo/bar/g' -c 'wq' file

vim 不生成 tmp 文件,但是这个工具将整个文件加载到内存中,这也浪费了很多时间。


是否有更好的解决方案,只将第一行读入内存并将其写回原始文件?我知道 linux head 命令可以非常快速地提取第一列。

最佳答案

请您尝试执行 awk 命令,如果这对您有帮助,请告诉我,我无法测试它,因为我没有像 500 GB 这样的大文件。可以肯定的是,它不应该在后端创建任何临时文件,因为它没有在 Input_file 上使用就地替换。

awk 'FNR==1{$1="bar";print;next} 1' Input_file > temp_file && mv temp_file Input_file

关于linux - 在 linux 命令行中替换大文件第一行中字符串的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46630396/

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