我在一个有 1000 万行的文件上测试了这些命令,希望对您有用。
将标题(文件的前 30 行)提取到一个单独的文件中,header.txt:
perl -ne 'print; exit if $. == 30' 1.8TB.txt > header.txt
现在您可以编辑文件header.txt,以便在其末尾添加一两行空行,作为它与文件其余部分之间的视觉分隔符。
现在将您的大文件从第 5 百万行复制到文件末尾 - 到新文件 0.9TB.txt. 中,而不是数字 5000000,在此处输入您要开始复制文件的行号,正如你所说,你知道:
perl -ne 'print if $. >= 5000000' 1.8TB.txt > 0.9TB.txt
请耐心等待,这可能需要一段时间。您可以启动“top”命令来查看发生了什么。您还可以使用tail -f 0.9TB.txt 跟踪不断增长的文件
现在合并header.txt 和0.9TB.txt:
perl -ne 'print' header.txt 0.9TB.txt > header_and_0.9TB.txt
让我知道此解决方案是否适合您。
编辑:步骤 2 和 3 可以合并为一个:
perl -ne 'print if $. >= 5000000' 1.8TB.txt >> header.txt
mv header.txt 0.9TB.txt
编辑 26.05.21:
我用split 测试了这个解决方案,它的速度要快很多:
如果您没有perl,请使用head 提取标题:
head -n30 1.8TB.txt > header.txt
split -l 5000030 1.8TB.txt 0.9TB.txt
(注意扩展名为*.txtab的文件,由split创建)
cat 0.9TB.txtab >> header.txt
mv header.txt header_and_0.9TB.txt