2016-11-04 13 views
1

ファイルが非常に大きく(> 5G)、行番号でいくつかの行を移動(コピー&ペースト)ファイルlinuxコマンドを使用して大きなファイル(> 5G)の特定の行を削除する方法

このコマンドが小さいサイズのファイルで動作することはわかっています。 (私のsedコマンドでは、-iオプションを認識しません)

sed "${line}d" file.txt > file.tmp && mv file.tmp file.txt 

このコマンドは、理由のサイズで比較的長い時間を要します。最初の行と最後の行を削除するだけでなく、行番号nを削除する方法も知りたいとします。

+0

ここでの問題は何だ、同じコマンドを使用できますか?この操作の時間、またはパーティションにスペースがありませんか? – DevilaN

答えて

0

ファイルが標準ファイルシステム(NTFS、EXTFS、...)に格納される方法のため、ファイルの一部をインプレースで削除することはできません。

あなたはその場で行うことができる唯一のことは、

  • は、ファイル内のデータを変更
  • (モードを追加)、ファイルの末尾に追加される(読み書きモード)

他の操作では、ファイルを完全に読み取って変更を書き戻すために、一時ファイルまたは一時メモリーを使用する必要があります。

EDIT:Cプログラム(LinuxまたはWindowsが動作する)を使用してhereのようにファイルを「縮小」することもできます。つまり、最後の行は削除できますが(最初の行またはその間の行は削除できません) )

+0

削除したい行が最初の行か最後の行の場合はどうなりますか?ファイルの先頭または末尾のポインタ(または同等のメタ情報)を動かすことによって、ファイルシステム上のファイルを縮小する方法はありますか? –

+0

私の編集を参照してください。ポインタを移動してファイルの先頭を削除することもできますが、ディスクブロック(スーパーユーザー+超危険な:)を編集する必要があります) –

0

あなたは

ed -s file.text 

ヨーヨーをsedをするのは非常に似ているedコマンドを使用することができますdコマンドを使用すると、は最後の行を削除し、1dは最初の行を削除し、wqは書き込みと終了を行います。

次のコマンドはすべて(書き込み、最初と最後の行を削除し、終了)を行います

echo -e '1d\n$d\nwq' | ed -s test.txt 

sedを使用して、あなたはsed '1d;$d' test.txt

関連する問題