大型(10M 行)文件的高效标头替换?

大型(10M 行)文件的高效标头替换?

我正在尝试重命名大文件的列标题,我想知道最有效的方法。文件的长度为 10M 到 50M 行,每行约 100 个字符,共 10 列。

有人提出类似的问题,删除第一行,最佳答案涉及“tail”。使用 sed 有效地就地删除大文件头?

我的猜测是:

bash-4.2$ seq -w 100000000 1 125000000 > bigfile.txt
bash-4.2$ tail -n +2 bigfile.txt > bigfile.tail && sed '1 s/^/This is my first line\n/' bigfile.tail > bigfile.new && mv -f bigfile.new bigfile.txt;

有更快的方法吗?

答案1

  1. 将新标头输出到新文件,例如printf "This is my first line\n > bigfile.new.
  2. 使用 的来使用追加重定向来提供其余部分tail:。bigfile>>

备注:tail +2“GNUism”——适用于大多数 Linux 发行版,但不兼容 POSIX,并且可能不适用于其他 Unices。

答案2

假设bash使用 Linux,这可能比您问题中的代码更快:

(echo "New headers";tail +2 bigfile.txt) > newbigfile.txt && mv newbigfile.txt bigfile.txt

相关内容