大容量ファイルの先頭と末尾に行を追加する

大容量ファイルの先頭と末尾に行を追加する

大きなファイルの先頭と末尾に行を追加するシナリオがあります。

下図のように試してみました。

  • 最初の行の場合:

    sed -i '1i\'"$FirstLine" $Filename
    
  • 最後の行の場合:

    sed -i '$ a\'"$Lastline" $Filename  
    

ただし、このコマンドの問題は、ファイルの最初の行を追加してファイル全体を繰り返すことです。最後の行の場合は、ファイル全体をもう一度見て、最後の行を追加します。ファイル容量が非常に大きく(14GB)時間がかかります。

ファイルを一度だけ読みながらファイルの先頭に1行を追加し、ファイルの最後に別の行を追加するにはどうすればよいですか?

ベストアンサー1

sed -i一時ファイルの使用は実装の詳細です。ただし、既存のコンテンツを上書きせずにデータストリームの先頭にデータを追加したい場合は、ファイルを再作成する必要がありますsed -i

ファイルを書き換えることができない場合は、ファイルを読み取るときにそのファイルに対する操作を検討できます。たとえば、次のようになります。

{ echo some prepended text ; cat file ; } | command

また、sedはストリーム編集用です。ファイルはストリームではありません。 edやexなど、この目的のために設計されたプログラムを使用してください。 sedオプションは-i移植できないだけでなく、実際にファイルを削除して再生成するため、ファイルへのすべてのシンボリックリンクを切断します。これは意味がありません。

次のように単一のコマンドを使用してこれを実行できますed

ed -s file << 'EOF'
0a
prepend these lines
to the beginning
.
$a
append these lines
to the end
.
w
EOF

edの実装に応じてページングファイルを使用できるため、少なくとも十分な空き容量が必要です。

おすすめ記事