我有一個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
。