![大型(10M 行)文件的高效标头替换?](https://linux22.com/image/15333/%E5%A4%A7%E5%9E%8B%EF%BC%8810M%20%E8%A1%8C%EF%BC%89%E6%96%87%E4%BB%B6%E7%9A%84%E9%AB%98%E6%95%88%E6%A0%87%E5%A4%B4%E6%9B%BF%E6%8D%A2%EF%BC%9F.png)
我正在尝试重命名大文件的列标题,我想知道最有效的方法。文件的长度为 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
- 将新标头输出到新文件,例如
printf "This is my first line\n > bigfile.new
. - 使用 的来使用追加重定向来提供其余部分
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