拆分大日志文件而不保留原始文件(就地拆分)

Cea*_*fin 5 linux awk sed

我有一个 226GB 的日志文件,我想把split它分成几块以便于xz阅读。问题是我的可用空间只剩下 177GB 的空间。

有没有办法split在不保留原始文件的额外副本的情况下将文件分成一半或分成N个块?

    $ 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
Run Code Online (Sandbox Code Playgroud)

我宁愿没有剩余的 myFile.txt,而只有拆分文件。我很乐意坚持默认行为并删除原始行为,但我没有可用的空间来完成它。

我不是一个专家sedawk但我想也许会有办法的行为,这种“删除到另一个文件”,可以用其中的一个可以实现吗?

Sve*_*ven 2

可能有效的方法是将其部分直接流式传输到xz- 我想您可以压缩一个日志文件,足以将原始部分和压缩部分放入您剩下的空间中。

  1. 获取行数:

    wc -l myFile.txt
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将其分为任意多个部分,例如每个部分 10k 行。
  3. 用于sed将您想要的部分通过管道传输到xz

    sed -n '1,10000p' myFile.txt | xz > outfile01.xz 
    sed -n '10001,20000p' myFile.txt | xz > outfile02.xz
    
    Run Code Online (Sandbox Code Playgroud)

等等。这当然可以通过脚本来完成。

但老实说,按照 EEAA 所说的去做......