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

时间:2017-10-08 11:06:51

标签: linux file text-processing

我在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命令可以非常快地提取第一列。

1 个答案:

答案 0 :(得分:0)

你可以试试下面的awk命令,让我知道这是否对你有帮助,我无法测试它,因为我没有像500 GB这样的大文件。确保它不应该在后端创建任何临时文件,因为它没有在Input_file上使用inplace替换。

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