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