如何使用linux命令删除大文件(> 5G)的某些行

时间:2016-11-04 20:22:48

标签: linux awk sed file-processing

我有非常大的文件(> 5G),我想删除行号的一些行而不移动(复制和粘贴)文件

我知道这个命令适用于小尺寸文件。 (我的sed命令无法识别-i选项)

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

由于大小,此命令需要相对较长的时间。我只需要删除第一行和最后一行,但也想知道如何删除行号n,例如。

3 个答案:

答案 0 :(得分:0)

由于文件存储在标准文件系统(NTFS,EXTFS,...)上的方式,您无法就地删除部分文件。

你唯一可以做到的就是

  • 追加到文件的末尾(追加模式)
  • 修改文件中的数据(读写模式)

其他操作必须使用临时文件或临时内存来完全读取文件并将其写回修改。

编辑:你也可以"收缩"使用C程序读取here的文件(Linux或Windows可以工作),这意味着您可以删除最后一行(但仍然不是第一行或其间的任何行)

答案 1 :(得分:0)

如果您使用的是最近的Linux,则可以在任何位置删除文件块:https://lwn.net/Articles/415889/

答案 2 :(得分:0)

你可以使用与sed非常相似的ed命令

ed -s file.text

您可以使用d命令,$d将删除最后一行,1d将删除第一行,wq将写入并退出。

以下命令将执行所有操作(删除第一行和最后一行,写入和退出)

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

使用sed您可以使用相同的命令sed '1d;$d' test.txt