我有一个 150GB 的 xml 文件,我想将其缩短(即截断)到大约 1GB - 是否有一个可以使用的简单(bash 或类似的)命令,还是必须采用编程方式(即使在大型系统上,在 vi 或 emacs 中编辑它也是一场噩梦)?
(我并不特别担心信息的丢失,我想要一个更短的文件,这样我就可以用它来测试软件,而不用等待几个小时才能得到答案,一个更短的文件可以让我做到这一点。)
答案1
假设您想要截断并提取 150 GB 文件中的前 1 GB:
和head
:
head -c 1G infile > outfile
请注意,G
后缀可以替换为,GB
以对齐到 1000 而不是 1024。
或者dd
:
dd if=infile of=outfile bs=1M count=1024
或者像 Wumpus Q. Wumbley 的回答那样,dd
可以就地截断。
答案2
答案3
如果可能,我会使用truncate
John1024 的回答中的命令。不过,这不是标准的 unix 命令,所以有一天你可能会发现自己无法使用它。在这种情况下,dd
也可以进行就地截断。
dd
的默认行为是在复制结束的位置截断输出文件,因此您只需给它一个长度为 0 的输入文件并告诉它从所需的截断点开始写入:
dd if=/dev/null of=filename bs=1048576 seek=1024
dd
(这与multithr3at3d 的答案中的复制和截断不同。)
请注意,我使用了 1048576 和 1024,因为 1048576*1024 是所需大小。我避免使用 bs=1m,因为这是一个“可移植性”答案,而 classicdd
只知道后缀k
、b
和w
。