我有一个 226GB 的日志文件,我想split
将其分成几块以便于xz
阅读。问题是我的可用空间只剩下 177GB。
有没有办法将split
文件分成两半或两半否无需保留原始的额外副本?
$ split myFile.txt
$ ls -halF
-rw-r--r-- 1 user group 35 Dec 29 13:17 myFile.txt
-rw-r--r-- 1 user group 8 Dec 29 13:18 xaa
-rw-r--r-- 1 user group 3 Dec 29 13:18 xab
-rw-r--r-- 1 user group 5 Dec 29 13:18 xac
-rw-r--r-- 1 user group 10 Dec 29 13:18 xad
-rw-r--r-- 1 user group 8 Dec 29 13:18 xae
-rw-r--r-- 1 user group 1 Dec 29 13:18 xaf
我宁愿没有剩余的 myFile.txt,只保留分割文件。我很乐意坚持默认行为并删除原始文件,但我没有足够的空间来完成此操作。
我不是专家sed
,但awk
我认为也许有一种方法可以通过其中一种实现“移除到另一个文件”之类的行为?
答案1
可能有效的是将其部分直接流式传输到xz
- 我猜你可以压缩一个日志文件,足以将原始部分和压缩部分都放入剩余空间。
获取行数:
wc -l myFile.txt
- 将其分成任意多个部分,例如每部分 10k 行。
使用
sed
管道将您想要的部分输入到xz
:sed -n '1,10000p' myFile.txt | xz > outfile01.xz sed -n '10001,20000p' myFile.txt | xz > outfile02.xz
等等。这当然可以通过脚本来完成。
但老实说,按照 EEAA 所说的去做......
答案2
你可以连续化身尾巴和截短从大文件的末尾切掉一些块。
就像是
tail -n 10000 myFile.txt > myFile.001.txt
truncate -s -$(wc -c myFile.001.txt) myFile.txt
xz myFile.001.txt
rm myFile.001.txt
您也可以编写脚本。不过,它可能需要一段时间才能运行,最好是在机外处理。