非常に大きな(それぞれ数GBの)テキストファイルのグループがあります。これらの各ファイルの先頭に2行追加する必要があります。
次のコマンドでsedを使ってみました
sed -i '1iFirstLine'
sed -i '2iSecondLine'
sedの問題は、最初に2行しか追加しなくても、ファイル全体をループするため、時間がかかることです。
ファイル全体を読み取らずに、これをより効率的に行う別の方法はありますか?
非常に大きな(それぞれ数GBの)テキストファイルのグループがあります。これらの各ファイルの先頭に2行追加する必要があります。
次のコマンドでsedを使ってみました
sed -i '1iFirstLine'
sed -i '2iSecondLine'
sedの問題は、最初に2行しか追加しなくても、ファイル全体をループするため、時間がかかることです。
ファイル全体を読み取らずに、これをより効率的に行う別の方法はありますか?
試してみてください
echo "1iFirstLine" > newfile.txt
echo "2iSecondLine" >> newfile.txt
cat oldfile.txt >> newfile.txt
mv newfile.txt oldfile.txt
これは完全に機能していて、非常に高速です。
perl -pi -e '$.=0 if eof;print "first line\nsecond line\n" if ($.==1)' *.txt
ファイルを書き直さないと、最初に追加することはできません(最後に追加するのとは異なります)。ファイルシステムがそれをサポートしていないため、ファイルコンテンツを「シフト」することはできません。だからあなたはすべきです:
echo -e "line 1\nLine2" > tmp.txt
cat tmp2.txt oldbigfile.txt > newbigfile.txt
rm oldbigfile.txt
mv newbigfile.txt oldbigfile.txt
両方のファイルをしばらく保持するのに十分なディスクスペースが必要であることに注意してください。